http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54025
Bug #: 54025 Summary: atomic<chrono::duration> won't compile: chrono::duration::duration() is not C++11 compliant Classification: Unclassified Product: gcc Version: 4.7.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: c...@pobox.com Attempting to compile atomic<duration> fails, because the duration default constructor is not " = default" as required by the standard, but instead explicitly initializes its representation. Here is what libstdc++ says: constexpr duration() : __r() { } but here is what the standard says should be there, and if I make the change, compilation succeeds: constexpr duration() = default; Test source: #include <atomic> #include <chrono> using namespace std; using namespace chrono; int main() { atomic<duration<long, micro>> dur; } Error before patch: /usr/include/c++/4.7/atomic: In instantiation of ‘struct std::atomic<std::chrono::duration<long int, std::ratio<1ll, 1000000ll> > >’: atdur.cc:6:35: required from here /usr/include/c++/4.7/atomic:160:7: error: function ‘std::atomic<_Tp>::atomic() [with _Tp = std::chrono::duration<long int, std::ratio<1ll, 1000000ll> >]’ defaulted on its first declaration with an exception-specification that differs from the implicit declaration ‘constexpr std::atomic<std::chrono::duration<long int, std::ratio<1ll, 1000000ll> > >::atomic()’