[Bug libstdc++/80690] [7/8 Regression] clang rejects std::thread with -std=c++1z
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 9 11:07:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80690
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Our std::is_function is not compatible with Clang:
struct true_type { static constexpr bool value = true; };
struct false_type { static constexpr bool value = false; };
template<typename>
struct is_function
: public false_type { };
#if __cpp_noexcept_function_type
template<typename _Res, typename... _ArgTypes, bool ne>
struct is_function<_Res(_ArgTypes...) noexcept(ne)>
: public true_type { };
#else
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };
#endif
template<typename T> struct remove_reference { using type = T; };
template<typename T> struct remove_reference<T&> { using type = T; };
template<typename T> struct remove_reference<T&&> { using type = T; };
static_assert( is_function<void()>::value, "" );
prog.cc:10:10: error: class template partial specialization contains a template
parameter that cannot be deduced; this partial specialization will never be
used [-Wunusable-partial-specialization]
struct is_function<_Res(_ArgTypes...) noexcept(ne)>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cc:9:53: note: non-deducible template parameter 'ne'
template<typename _Res, typename... _ArgTypes, bool ne>
^
prog.cc:22:1: error: static_assert failed ""
static_assert( is_function<void()>::value, "" );
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
I think it's a Clang bug, that should be deducible.
More information about the Gcc-bugs
mailing list