このコード:gccとmsvcは、ユーザ提供コンストラクタのないconstオブジェクトを許可するのはなぜですか?これはバグですか?
class A {
public:
A() = default;
};
int main()
{
const A a;
return 0;
}
は、Visual C(VS 2015のアップデート2から)++とGCC(5.3.1)でエラーなしでコンパイルすることができますが、クランしてコンパイルすることができない、それはこのエラーを与える:
test.cpp:8:13: error: default initialization of an object of const type
'const A' without a user-provided default constructor
const A a;
^
{}
1 error generated.
右、clangまたはgccとMSVCは誰ですか? 他のコンパイラの動作はバグですか?
PS。 const A a{};
は3つすべてでエラーなしでコンパイルされます。 空のコンストラクタ:A::A() {}
を定義すると同じです。
PPS。これは複製ではありません。私は実際の質問を強調する。
更新 MSVCのバグに提出されました:https://connect.microsoft.com/VisualStudio/feedback/details/2538005 S.T.L.彼らはすべてをクランプテストに適合するように修正していると言いました:https://twitter.com/StephanTLavavej/status/715923311796953089
なぜデフォルトコンストラクタをデフォルトに定義しますか?それがデフォルトで宣言されていない場合は、それを宣言して定義します。 –
@AsierSánchezRodríguezできるので。これは質問ではありません。 – vladon
@juanchopanza Fixed – vladon