Функция Constexpr не является constexpr при использовании шаблона - PullRequest
0 голосов
/ 03 февраля 2019

Следующий код прекрасно компилируется:

struct A {
    int i;
    constexpr A() : i(1) { }
    constexpr A(const A& that) : i(1) { }
};
constexpr auto func() {
    std::array<A, 3> result = {};
    return result;
}

Однако, если мы добавим параметр типа шаблона T в A,

template<typename T> struct A {
    int i;
    constexpr A() : i(1) { }
    constexpr A(const A<T>& that) : i(1) { }
};
constexpr auto func() {
    std::array<A<int>, 3> result = {};
    return result;
}

ошибки компилятора " Функция constexpr 'func' не может привести к постоянному выражению".

Как это возможно?

1 Ответ

0 голосов
/ 03 февраля 2019

Да, у MSVC были (или есть) некоторые проблемы с реализацией функций C ++ 14/17, и это, очевидно, также относится к constexpr.Однако в Visual Studio 2017 15.9 у меня работает следующая небольшая модификация (тогда как версия в OP также выдает ошибку):

template<typename T> struct A {
    int i;
    constexpr A() : i(1) { }
    constexpr A(const A<T>& that) : i(1) { }
};
constexpr auto func() {
    return std::array<A<int>, 3>{};
}
...