https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94003
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Depends on| |41437 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Almost certainly due to one of the bugs linked to PR 59002, probably PR 41437. Inside the function template access checking doesn't work properly, so you can use the private constructor, and the first instantiation of the trait gives the wrong answer: template <typename X> static bool why() { Class c; return std::is_constructible<Class>::value; } Then when the trait is rechecked later it has already been instantiated, and so continues to give the wrong answer. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41437 [Bug 41437] No access control for classes in template functions