次のコードを見ると、main()
の両方の行がInitSomething
のinitializer_list
コンストラクタを呼び出す必要があります。 gccは私が期待した通り22
を出力しますが、clangはただ一つの2
を出力します。 clangは間違っていますか?Clangがイニシャライザリスト構築の処理をスキップします
-std=c++14
とコンパイルしています。
#include <iostream>
struct InitSomething {
explicit InitSomething(int) { std::cout << '1'; }
InitSomething(std::initializer_list<int>) { std::cout << '2'; }
operator int() { return 1; }
};
int main() {
InitSomething init_something{1};
InitSomething init_something_else{init_something};
}
clang++ --version
の出力は、(私はMac上で午前)
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
であり、私が言及した他のプラットフォーム上でg++ --version
の出力は
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
直接 'some_value'を取って他のコンストラクタがある場合**のためinitializer_list賛成していない、最近、' {} 'some_valueのあらゆる**セット言語への変更がありました。 –
@BoPerssonあなたはC++ 17の権利を参照していますか? – Curious
私はそれが現われた時が正確ではない。 (http://open-std.org/JTC1/SC22/ - 参照を探しています... –