У меня есть свой собственный тип массива с фиксированным размером, который я хочу, чтобы 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()?