Допустим, у меня есть класс Foo
. Следующее работает отлично:
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {1, 2};
}
};
Однако я попытался немного изменить это, чтобы использовать шаблон:
template<int A, int B>
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {A, B};
}
};
Мое понимание работы шаблонов заключается в том, что A
и B
по существу являются константами времени компиляции, поэтому он все равно должен работать одинаково.
Сообщение об ошибке, которое я получаю при компиляции с помощью g ++ (4.5 в ссылке, та же ошибка с 4.6.3):
ошибка: ISO C ++ запрещает инициализацию в массиве new [-fpermissive]
При 4,7 возникает похожая ошибка, хотя и немного другая:
ошибка: инициализатор в скобках в массиве new [-fpermissive]
Проблема также возникает в функциях шаблона, а не только в том случае, когда параметры шаблона используются в фигурных скобках для инициализации, кода и вывода . (спасибо Филипп)