http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52104
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-02-03 11:08:47 UTC --- So fixing that configure test should make the problem go away? There's still a problem on non-TLS targets though. I have no idea how to explicitly instantiate the std::function template constructor for a lambda type, I don't think it's possible, so it might be necessary to move the ~_Async_state_base destructor into the header file for non-TLS targets. That would result in larger object files because the vtable and typeinfo would be emitted in every object using futures. And there's still a Solaris 10 problem: (In reply to comment #4) > As of 20120202, I get this instead: > > libstdc++.a[mutex.o]: [29] | 0| 4|TLS |GLOB |0 |8 > > |_ZSt15__once_callable > libstdc++.a[future.o]: [144] | 0| 0|TLS |GLOB |0 > |UNDEF > |_ZSt15__once_callable That symbol is the one used when TLS *is* available. __once_callable is just a __thread void* so doesn't need instantiating. Why isn't the definition in mutex.o used?