要求

2016-04-05 65 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’」。

誰的行爲符合標準?

回答

1

鏘是正確的,雖然它最終取決於您的圖書館實施。該標準本身不允許在常量表達式中爲非constexpr)對象調用constexpr函數;只有該對象的成員纔會使用(見[expr.const]/(2.7.3))。由於轉換運算符肯定只是返回0,因此可能是GCC錯誤(在考慮錯誤消息時也有提示)。