Complete (не) рабочий пример:GCC 4.7 не удается использовать указатель параметра шаблона иногда
struct s { int i; };
template<const s* _arr>
class struct_array
{
public:
static constexpr auto arr = _arr[0]; // works
template<int >
struct inner // line 9, without this struct, it works
{
};
};
constexpr const s s_objs[] = {{ 42 }};
int main()
{
struct_array<s_objs> t_obj;
return 0;
}
Составитель так:
g++ -std=c++11 -Wall constexpr.cpp -o constexpr
я получаю запущенную программу с GCC ideone в 4.8.1, но 4.7.3 отпечатывает это мне:
constexpr.cpp: In instantiation of ‘class struct_array<((const s*)(& s_objs))>’:
constexpr.cpp:18:30: required from here
constexpr.cpp:9:16: error: lvalue required as unary ‘&’ operand
constexpr.cpp:9:16: error: could not convert template argument ‘(const s*)(& s_objs)’ to ‘const s*’
Последние две строки повторяются 3 раза. В чем причина, и есть ли способ обхода моего кода на gcc 4.7.3?
Я настоятельно рекомендую вам попробовать использовать новый компилятор и избегать глупых обходных решений для ошибок компилятора. Хотя это может оказаться невыполнимым во всех ситуациях. – rubenvb