В вашем коде есть некоторые проблемы.
(1) если вы хотите передать ссылку на объект в качестве параметра шаблона, вы должны определить его как constexpr
и присвоить ему внешний static
связь (static
не требуется, исправление от birdfreeyahoo (спасибо!)), Поэтому
constexpr A b[5];
int main ()
{
W<5,b> w;
}
(2), если вы хотите (массив в стиле C) constexpr
A
Объект (ы) инициализирован с конструктором по умолчанию, вы также должны сделать contexpr
конструктором.
Итак
public:
constexpr A(){}
(3), если вы хотите, чтобы второй параметр шаблона для W
являлся ссылкой на постоянный массив в стиле C, равный A
с, где измерениеявляется первым параметром, синтаксис
template <int N, A const (& obj)[N]>
struct W
{ };
Таким образом, полная программа становится
class A
{
public:
constexpr A ()
{ }
};
template <int N, A const (& obj)[N]>
struct W
{ };
constexpr A b[5];
int main ()
{
W<5, b> w;
}