为什么 `consteval` 的行为不如预期?
Why does `consteval` not behave as expected?
inline consteval unsigned char operator""_UC(const unsigned long long n)
{
return static_cast<unsigned char>(n);
}
inline consteval char f1(auto const octet)
{
return char(octet >> 4_UC);
}
inline constexpr char f2(auto const octet)
{
return char(octet >> 4_UC);
}
int main()
{
auto c1 = f1('A'); // ok
auto c2 = f2('A'); // error
return c1 + c2;
}
编译为:clang++-14 -std=c++20 -stdlib=libc++
,错误信息为:
undefined reference to `operator"" _UC(unsigned long long)'
为什么 f1()
可以,而 f2()
不行?
为什么 consteval
没有按预期运行?
这是 clang 14 的一个错误,已经修复。
参见:https://github.com/llvm/llvm-project/commit/ca844ab01c3f9410ceca967c09f809400950beae
inline consteval unsigned char operator""_UC(const unsigned long long n)
{
return static_cast<unsigned char>(n);
}
inline consteval char f1(auto const octet)
{
return char(octet >> 4_UC);
}
inline constexpr char f2(auto const octet)
{
return char(octet >> 4_UC);
}
int main()
{
auto c1 = f1('A'); // ok
auto c2 = f2('A'); // error
return c1 + c2;
}
编译为:clang++-14 -std=c++20 -stdlib=libc++
,错误信息为:
undefined reference to `operator"" _UC(unsigned long long)'
为什么 f1()
可以,而 f2()
不行?
为什么 consteval
没有按预期运行?
这是 clang 14 的一个错误,已经修复。
参见:https://github.com/llvm/llvm-project/commit/ca844ab01c3f9410ceca967c09f809400950beae