
constexpr int test() {
constexpr std::array<int, 7> a = {5, 3, 2, 9, 1, 0, 4};
for (const int e : a) { // range-based for
}
return 0;
}
C++ における constexpr について、range-based for の行でコンパイルエラーが発生する原因を教えて下さい。
エラー内容は、
「エラーの原因は未定義関数の呼び出しまたは 'constexpr' が宣言されていない呼び出しです
test.cpp(8): note: 'std::array<int,7>::_Unchecked_begin' の使用量を参照してください」
で、環境は Visual Studio 2019 です。
std::array<int,7>::begin や std::array<int,7>::end は constexpr 関数でしたが…
まだ未対応ということなのでしょうか?
No.2ベストアンサー
- 回答日時:
原因はよく分りませんが、当方の環境 (Visual Studio 2019 Version 16.5.4) で、プロジェクトのプロパティ→[全般]→[C++ 言語標準]を“ISO C++17 標準 (std:c++17)”にするとコンパイルエラーにはなりませんでした。
“ISO C++14 標準 (std:c++14)”では同じようなエラーになりました。
デフォルトでは "C++14" だったと思います。
詳細は把握していませんが、標準規格でも "constexpr" の扱いは結構変遷があったようなので、それが原因かも知れません。
ここのページ (https://cpprefjp.github.io/lang/cpp14/relaxing_c … )によると C++14 で変わっているはずですが、VC で扱いは違うのかもしれません。
蛇足ですが、g++ でも -std=c++14 ではエラーになりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C++】ヘッダ内でstringを格納...
-
プログラミング
-
boost::formatの値をstring型に...
-
VHDLのsignedとunsignedの違いは?
-
OpenCVでRAW画像(カラー)を開...
-
listをvectorにコピーするときに
-
途中からMFCを使用したい
-
VC++で文字列から任意の文字を...
-
switch文のエラーについて
-
コンパイルできません
-
自作ライブラリを作成していて...
-
gccでコンパイル時のエラー
-
ポインタ・ハンドル間のコピー...
-
C言語のポインターで詰まっている
-
VxWorks 6.4ソケット接続につい...
-
CStringとString
-
#defineの使い方について
-
std::wstringのメモリリークに...
-
なぜ、C++の標準ヘッダをインク...
-
std::map の const 修飾について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VxWorks 6.4ソケット接続につい...
-
gccでコンパイル時のエラー
-
iostream インクルード時に発生...
-
#include "fstream.h"
-
【C++】ヘッダ内でstringを格納...
-
#defineの使い方について
-
構文エラーが出ているのですが...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
C++での <iostream.h>と<iostre...
-
enumの値から定義名を文字列化...
-
MingwでC++のソースがコンパイ...
-
違い
-
VC++で
-
C++で日本語の処理がしたいです
-
継承されたABのクラスのポイン...
-
C++でShowCursorを使いたい。
おすすめ情報