#include <array>
#include <tuple>
typedef std::tuple<const int> TupleType;
constexpr std::array<const int, 2> a = {1, 2};
constexpr void foo()
{
for (std::size_t i = 0; i < a.size(); ++i)
{
const int j = i;
typedef std::tuple_element<j, TupleType> T;
}
}
該代碼不能被GCC-7.2編譯--std = C++ 17與以下編譯錯誤:編譯時間類型代constexpr功能
error: the value of 'j' is not usable in a constant expression
note: in template argument for type 'long unsigned int'
如果我們假設函數(和相應的循環)在編譯時被評估(這對於從C++ 14開始的循環是可行的),爲什麼這個代碼不能儘管i未被聲明爲const,但它實際上可以是constexpr,因爲它的所有值在編譯時也是已知的。
您能否澄清一下這段代碼是否因其思想而無效?或者有一個編譯器限制?或者以下都不是?