次のコードは有効な 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 での整数リテラルの解析にバグはありますか?