https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107544
--- Comment #4 from danakj at orodu dot net --- It looks related but I am not sure it is a duplicate. In this case, the concept is being used from a non-friend context first and still accessing the private data. In that bug, they demonstrate clang having the same output, but here clang and GCC differ as well. ``` std::cout << HasTag<S> << "\n"; std::cout << check_tag<S>::value() << "\n"; ``` Reordering these statements does not change the output.