У меня есть свой собственный тип массива с фиксированным размером, который я хочу, чтобы constexpr
можно было constexpr
из std::initializer_list
без необходимости явно определять аргумент шаблона размера.
Я думал, что смогу использовать руководство по выводу шаблона, но похоже, что он не рассматривает std::initializer_list::size()
как функцию constexpr для него.
Вот пример попытки сделать руководство по std::array
для std::array
(который похож на мой тип и имеет ту же проблему):
namespace std
{
template<typename T> array(initializer_list<T> initialiserList) -> array<T, initialiserList.size()>;
}
static constexpr std::array myArray = {1,2,3};
static constexpr std::array myArray2 = {{1,2,3}};
Я пробовал на MSVC и Clang, оба дают примерно одинаковые ошибки: myArray
имеет ошибку, из-за которой слишком много аргументов для функции. myArray2
говорит: "ошибка замещения [с T = int]: аргумент шаблона не-типа не является константным выражением"
Я попытался поместить constexpr
перед руководством по constexpr
или аргументом функции, но ни один из них, по-видимому, недопустим, поэтому кажется, что руководство по constexpr
является недействительным, даже если оно отлично работает в контексте constexpr
.
Есть ли способ сделать это без перехода по маршруту make_array()
?