Mam następujący fragment kodu, który przypisał typ nullptr
do bool
.Przypisano `nullptr` do typu` bool`. Który kompilator jest poprawny?
#include <iostream>
int main()
{
bool b = nullptr;
std::cout << b;
}
W brzękiem 3.8.0 działa poprawnie. daje wynik 0
. Clang Demo
Ale g ++ 5.4.0 daje błąd:
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;
Który kompilator jest poprawna?
dostaję ostrzeżenie kompilatora podczas uruchamiania go w kompilator żywo ty powiązane. "warning: niejawna konwersja stałej nullptr na" bool "[-Wnull-conversion]" – UnholySheep
Zgodnie z błędem podanym przez GCC (i MSVC) oraz sekcję w [reference] (http://en.cppreference.com/ w/cpp/language/implicit_conversion) Powiedziałbym, że nie jest to dozwolone przez standard (a Clang zezwala na to jako rozszerzenie). – UnholySheep
Cholernie nie powinno być. Jednym z punktów 'nullptr' było uczynienie za pomocą wskaźnika w kontekście boolowskim dobrze określonej rzeczy do zrobienia. : -/Ale, widzę, jak to może być poprawne, aby przynajmniej ostrzec o bezpośredniej konwersji w formie takiego zadania. Czy kompilator nadal podaje błąd, gdy masz 'nullptr && true' zamiast tylko' nullptr'? – Omnifarious