Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#3366 closed defect (fixed)

GCC < 4.8.0 does not support emplace* in associative containers

Reported by: leper Owned by: leper
Priority: Release Blocker Milestone: Alpha 19
Component: Core engine Keywords:
Cc: Patch:

Description

The documentation for 4.6.* claims to support it while it does not. (See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44436) 4.7 has the documentation updated to indicate the missing support.

This breaks the build on Ubuntu 12.04 (and since the default gcc for 14.04 is 4.7 likely also for that). Build log: https://launchpadlibrarian.net/214230683/buildlog_ubuntu-precise-amd64.0ad_0.0.18%2Br16914-0ubuntu1~12.04~wfg0_BUILDING.txt.gz.

CppSupport should be updated to include this information.

At least r16894 and r16887 should partially be reverted.

Change History (4)

comment:1 by historic_bruno, 9 years ago

I updated the CppSupport page, but I don't know the status of Clang 3.1 support in this case. If anyone finds that info, they can update the page :)

comment:2 by leper, 9 years ago

Judging from http://llvm.org/releases/2.8/docs/ReleaseNotes.html (libc++ header) it should be supported in Clang 3.1, which was released about 1.5 years later. Sadly http://libcxx.llvm.org/index.html only has pages for C++1x (C++14) and C++1y, but I guess that only implies C++11 being fully supported.

Thanks for updating the page already!

comment:3 by leper, 9 years ago

Resolution: fixed
Status: newclosed

In 16922:

Revert emplace for associative containers. Fixes #3366.

GCC < 4.8.0 does not support emplace for those.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44436.

comment:4 by leper, 9 years ago

Above revisions should be all that's needed to fix the compilation on 4.6. I also reverted some uses of emplace on boost map containers so that there is not confusion when looking at the code.

Note: See TracTickets for help on using tickets.