http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55977
--- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-14 22:18:08 UTC --- I just notice that the implementation of construct should be changed to template <class U, class... Args> void construct(U* p, Args&&... args) { ::new (static_cast<void*>(p)) U(std::forward<Args>(args)...); } instead. The slight difference (Replace T by U) doesn't matter in this example, but for correctness reasons should be applied.