次のデモプログラムを検討してください。
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
このプログラムはによってコンパイルされMicrosoft Visual Studio Community 2019
ます。
しかしclang
、gcc
このようなエラーを発行します
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
このような式を記述する場合、( 0.f ).T::~T()
3つのコンパイラすべてがプログラムをコンパイルします。
したがって、疑問が生じ0.f.T::~T()
ます。このレコードは構文的に有効ですか?そうでない場合、どの構文規則が違反していますか?
(0.f).T::~T();
float f = 1.0f.t;
場合、数値リテラルに関するエラーが発生します。
float
は組み込み型であり、呼び出すデストラクタがありません。手動でデストラクタを呼び出していますか?配置-新しい領域の外では、それは大きなノーノーでなければなりません。
0.f
と、.T
両方のGCCとクラン原因は...これを受け入れるように