https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93923
Bug ID: 93923 Summary: [Regression 10] std::is_copy_constructible raises compilation error Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: laurent.stacul at gmail dot com Target Milestone: --- Hello, The following code does not compile anymore with gcc 10 although it works in 9.2, 9.2, 8.x. #include <type_traits> #include <initializer_list> class A; template<typename T> struct B { template< class... Args, std::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0 > B(Args && ... args) {} }; struct A { A(const B<A>& b) {} }; int main(int argc, const char *argv[]) { static_assert(std::is_copy_constructible<A>::value); return 0; } Compiling with the HEAD of gcc 10 I have the following error: $ g++ is_constructible.cpp [jobs: 0][history: 5132] In file included from is_constructible.cpp:1: /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits: In instantiation of ‘struct std::is_constructible<A, const A&>’: is_constructible.cpp:10:75: required by substitution of ‘template<class ... Args, typename std::enable_if<std::is_constructible<A, Args ...>::value, int>::type <anonymous> > B<A>::B(Args&& ...) [with Args = {const A&}; typename std::enable_if<std::is_constructible<A, Args ...>::value, int>::type <anonymous> = <missing>]’ /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits:901:30: required from ‘struct std::__is_constructible_impl<A, const A&>’ /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits:930:12: required from ‘struct std::__is_copy_constructible_impl<A, true>’ /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits:936:12: required from ‘struct std::is_copy_constructible<A>’ is_constructible.cpp:21:48: required from here /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits:906:12: error: invalid use of incomplete type ‘struct std::__is_constructible_impl<A, const A&>’ 906 | struct is_constructible | ^~~~~~~~~~~~~~~~ /remote/tools/Linux/2.6/1A/toolchain/x86_64-v20.0.10/include/c++/10.0.1/type_traits:900:12: note: declaration of ‘struct std::__is_constructible_impl<A, const A&>’ 900 | struct __is_constructible_impl | ^~~~~~~~~~~~~~~~~~~~~~~ This is true in any standard versions (-std=c/gnu++14, c/gnu++17, c/gnu++2a, c++20). System information $ gcc --version gcc (GCC) 10.0.1 20200220 (experimental) Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ uname -a Linux ncerndobedev6196 4.12.14-95.45-default #1 SMP Wed Dec 11 13:09:13 UTC 2019 (12c8180) x86_64 x86_64 x86_64 GNU/Linux