https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77998
Bug ID: 77998 Summary: clang rejects std::thread from trunk Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org Target Milestone: --- markus@x4 tmp % cat thread.cpp #include <thread> #include <vector> int main() { std::vector<std::thread> threads; threads.emplace_back([]() {}); } markus@x4 tmp % g++ -c thread.cpp markus@x4 tmp % clang++ -c thread.cpp In file included from thread.cpp:1: /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/thread:239:39: error: member access into incomplete type 'std::thread::_Invoker<std::tuple<(lambda at thread.cpp:6:24)> >' = decltype(std::declval<_Invoker>()._M_invoke(_Indices())); ^ /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/thread:126:8: note: in instantiation of template class 'std::thread::_Invoker<std::tuple<(lambda at thread.cpp:6:24)> >' requested here __make_invoker(std::forward<_Callable>(__f), ^ /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/ext/new_allocator.h:120:23: note: in instantiation of function template specialization 'std::thread::thread<(lambda at thread.cpp:6:24)>' requested here { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } ^ /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/bits/alloc_traits.h:455:8: note: in instantiation of function template specialization '__gnu_cxx::new_allocator<std::thread>::construct<std::thread, (lambda at thread.cpp:6:24)>' requested here { __a.construct(__p, std::forward<_Args>(__args)...); } ^ /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/bits/vector.tcc:96:21: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<std::thread> >::construct<std::thread, (lambda at thread.cpp:6:24)>' requested here _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, ^ thread.cpp:6:11: note: in instantiation of function template specialization 'std::vector<std::thread, std::allocator<std::thread> >::emplace_back<(lambda at thread.cpp:6:24)>' requested here threads.emplace_back([]() {}); ^ /usr/lib64/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/thread:220:14: note: definition of 'std::thread::_Invoker<std::tuple<(lambda at thread.cpp:6:24)> >' is not complete until the closing '}' struct _Invoker ^ 1 error generated.