-
Notifications
You must be signed in to change notification settings - Fork 14.9k
Open
Labels
c++20clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"conceptsC++20 conceptsC++20 conceptsdiverges-from:gccDoes the clang frontend diverge from gcc on this issueDoes the clang frontend diverge from gcc on this issuediverges-from:msvcDoes the clang frontend diverge from msvc on this issueDoes the clang frontend diverge from msvc on this issue
Description
GCC bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107544
I don't know which compiler is right, but all three give a different output.
https://godbolt.org/z/7Pq3eWhc8
#include <compare>
#include <concepts>
#include <iostream>
template <class T>
concept HasTag = requires {
T::Tag;
requires std::same_as<decltype(T::Tag), const bool>;
};
template <class T>
struct check_tag final {
static constexpr bool value()
requires(!HasTag<T>)
{
return false;
}
static constexpr bool value()
requires(HasTag<T>)
{
return T::Tag;
};
};
struct S {
private:
template <class T>
friend struct check_tag;
static constexpr bool Tag = true;
};
int main() {
std::cout << HasTag<S> << "\n";
std::cout << check_tag<S>::value() << "\n";
}Clang output (the concept sees private data if used in friend):
0
1GCC output (the concept always sees private data):
1
1MSVC output (the concept never sees private data):
0
0Metadata
Metadata
Assignees
Labels
c++20clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"conceptsC++20 conceptsC++20 conceptsdiverges-from:gccDoes the clang frontend diverge from gcc on this issueDoes the clang frontend diverge from gcc on this issuediverges-from:msvcDoes the clang frontend diverge from msvc on this issueDoes the clang frontend diverge from msvc on this issue
Type
Projects
Status
No status