1
有人能告訴我如何解決下面的語法問題嗎?類型名稱和範圍操作符的語法錯誤
#include <iostream>
template <int N>
struct Thing {
static const int num = N;
};
template <int N>
struct Get {
using type = Thing<N>;
};
template <int... Is>
void foo() {
// int a[] = {(std::cout << Thing<Is>::num << '\n', 0)...}; // This compiles.
int a[] = {(std::cout << typename Get<Is>::type::num << '\n', 0)...}; // This does not.
}
int main() {
foo<0,1,2>();
}
GCC 5.1.0說[錯誤]預期 '(' 前 '< <' 令牌。有快捷方式解決這一問題(而不需要編寫一個新的功能,並把它foo中的稱呼)?
當然。擺脫'typename'。你沒有訪問嵌套類型,但值 –
啊!很簡單。謝謝。 – prestokeys
因爲然後一個編譯器認爲'num'是一個類型名稱,但它是無效的類型名稱放在一個表達式中,就像你做了 –