要件

2016-04-05 3 views
1

GCC(5.3.0)とクラン(3.8.0)の両方が、これは有効なコードであることに同意:要件

constexpr std::integral_constant<size_t, 0> n{}; 
std::get<n>(std::make_tuple(123)); 

はしかし、彼らはこれに反対する:

std::integral_constant<size_t, 0> n; 
std::get<n>(std::make_tuple(123)); 

GCCは「nの値は定数式では使用できません」/「n」は「constexpr」と宣言されていません」とGCCは報告しています。

どのような動作が標準に一致していますか?

答えて

1

最終的にはライブラリの実装にもかかわらず、Clangは正しいです。標準では、非constexpr)オブジェクトの定数式の中でconstexpr関数を呼び出すことが不可能ではありません。そのオブジェクトのメンバーの使用のみが問題になります([expr.const]/(2.7.3)参照)。変換演算子は、確かに単に0を返すので、おそらくGCCのバグです(エラーメッセージを考えているときには示唆もあります)。