nullptr
からbool
までのタイプのコードスニペットがあります。細かい作業`bool`型に` nullptr`を割り当てました。どのコンパイラが正しいのですか?
#include <iostream>
int main()
{
bool b = nullptr;
std::cout << b;
}
打ち鳴らすには
3.8.0。出力は0
です。 Clang Demo
しかしG ++ 5.4.0はエラーを与える:正しいコンパイラ
source_file.cpp: In function ‘int main()’:
source_file.cpp:5:18: error: converting to ‘bool’ from ‘std::nullptr_t’ requires direct-initialization [-fpermissive]
bool b = nullptr;
を? C++標準(4.12ブールの変換)から
ですでにこの問題を指摘しました。 "警告:nullptr定数を暗黙的に 'bool'に変換する[-Wnull-conversion]" – UnholySheep
GCC(およびMSVC)と[reference](http://en.cppreference.com/ w/cpp/language/implicit_conversion)標準では許可されていないと言いたいです(そしてClangは拡張機能として許可しています) – UnholySheep
それはうまくいけません。 'nullptr'の全体のポイントの1つは、ブール値のコンテキストでポインタを使用することです。 : - /しかし、少なくともそのような割り当ての形で直接変換について警告するのは正しいかもしれません。コンパイラは 'nullptr'の代わりに' nullptr && true'を指定してもエラーを返しますか? – Omnifarious