次の C++11 プログラムと、GCC 4.7.2 での結果を考えてみましょう。
int main()
{
constexpr int i = 0;
int* p = i;
}
// g++ -g -ggdb -Wall -Wextra -pedantic -std=c++11 t.cpp
// t.cpp: In function 'int main()':
// t.cpp:4:13: error: invalid conversion from 'int' to 'int*' [-fpermissive]
// t.cpp:4:9: warning: unused variable 'p' [-Wunused-variable]
標準によると:
[C++11: 4.10/1]:
null ポインター定数は、0 に評価される整数型の整数定数式 (5.19) prvalue です [..]
5.19 はめちゃくちゃで、完全に解析できませんでしたが、i
この基準を満たし、ヌル ポインター定数int*
として機能することを期待しないので、初期化のために明示的な変換を必要としませんp
か?
ではなくI s/constexpr/const/
and でコンパイルすると、コンパイルは成功します。-ansi
-std=c++11