以下代码似乎是有效的 C++,被所有主要编译器接受:
#include <string>
#include <iostream>
auto main()
-> int
{
using namespace std::string_literals;
std::cout << "Hello"s.length();
}
但是,Clang和GCC的两个主干版本都拒绝以下内容(同时被 VC14 接受):
#include <chrono>
#include <iostream>
auto main()
-> int
{
using namespace std::chrono_literals;
std::cout << 42s.count(); // COMPILER ERROR HERE WITH CLANG AND GCC
}
将有问题的行更改为(42s).count()
或42s .count()
修复问题。复杂的 UDL 也会出现类似的情况(同样,被Clang和GCC拒绝,被 VC 接受):
#include <complex>
#include <iostream>
auto main()
-> int
{
using namespace std::complex_literals;
std::cout << 42i.imag(); // COMPILER ERROR HERE WITH CLANG AND GCC
}
在 Clang 和 GCC 中解析整数文字是否存在错误?