aşağıdaki kodu göz önünde bulundurun: -std=c++11
veya -std=c++14
ile çınlama 3.8.0 ile derlemeyeniden yorumlayan bir şablon dışı tür parametresi döküm: C++ vs çınlama C++ 14 1z
template <int* > struct foo { };
int main() {
foo<(int*)42> f;
(void)f;
}
, program derler. ile -std=c++1z
, bu hataları ile derlerken:
main.cpp:4:9: error: non-type template argument is not a constant expression
foo<(int*)42> f;
^~~~~~~~
gcc 5.3.0 bakılmaksızın ben doğru olduğuna inandığımız C++ modu, kod derleme yapmaz. C++ 14 ve C++ 1z arasındaki clang farkı nedir ve neden kodu kabul ediyor? Burada alakalı C++ 1z'de bir şey mi değişti?
, VS 2015 derler: İşte
bazı böcek benzer (ancak doğrudan ilişkili olmayan) vakalarla raporlar vardır Sadece iyi – Rakete1111
Açıkçası bir böcek. C++ 1z, non-type şablon argümanlarında rahat kısıtlamalar, yani muhtemelen farklı bir kod yolu (bu hatayı tetiklemez) kullanılır. –
Görünüşe göre boş bir işaretçi gibi ele alınır: http://coliru.stacked-crooked.com/a/966a61826b6d73f9. Bu aklı başında davranış değil. –