考虑以下代码(Godbolt):
#include <iostream>
//#include <concepts>
#include <type_traits>
// Since the latest clang doesn't have <concepts>,
// took this here: https://en.cppreference.com/w/cpp/concepts/same_as
// Using of std::same_as still gives an error in GCC.
namespace detail {
template< class T, class U >
concept SameHelper = std::is_same_v<T, U>;
}
template< class T, class U >
concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>;
template<typename T>
concept HasStr = requires(T a) { { a.str } -> same_as<const char*>; };
struct A {
const …Run Code Online (Sandbox Code Playgroud)