7

以下代码似乎是有效的 C++,被所有主要编译器接受:

#include <string>
#include <iostream>

auto main()
    -> int
{
    using namespace std::string_literals;
    std::cout << "Hello"s.length();
}

但是,ClangGCC的两个主干版本都拒绝以下内容(同时被 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 也会出现类似的情况(同样,被ClangGCC拒绝,被 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 中解析整数文字是否存在错误?

4

0 回答 0