访问静态类成员函数或变量可以通过两种方式完成:通过对象(obj.member_fun()或obj.member_var)或通过类(Class::member_fun()或Class::member_var).但是,在constexpr函数中,Clang在对象访问时出错,需要使用类访问:
struct S
{
constexpr static auto s_v = 42;
constexpr static auto v() { return s_v; }
};
#define TEST 1
constexpr auto foo(S const& s [[maybe_unused]])
{
#if TEST
constexpr auto v = s.v(); // ERROR for clang, OK for gcc
#else
constexpr auto v = S::v(); // OK for clang and gcc
#endif
return v;
}
constexpr auto bar(S const& s [[maybe_unused]])
{
#if TEST
constexpr auto …Run Code Online (Sandbox Code Playgroud)