У меня есть свой собственный тип массива фиксированного размера, я хочу быть constexpr
конструируемым из std::initializer_list
без необходимости явно определять аргумент шаблона размера.
Я думал, что смогу использовать руководство по выводу шаблона, но похоже, что он не рассматривает std::initializer_list::size()
как функцию constexpr для него.
Вот пример попытки сделать руководство по выводу для 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
.
Есть ли способ заставить эту работу не идти по маршруту make_array()
?