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