Я пытаюсь создать шаблонный класс, содержащий пары перечисление-строка, и не могу выполнить вывод типа. Со следующим кодом у меня две проблемы:
namespace {
template<typename T, size_t S>
using EnumStringArray = std::array<std::pair<T, const char*>, S>;
}
template<typename T, size_t S>
class EnumToString {
public:
constexpr EnumToString(const EnumStringArray<T, S>& array) :
_array(array)
{}
private:
EnumStringArray<T, S> _array;
};
template<typename T, size_t S>
EnumToString(const EnumStringArray<T, S>&) -> EnumToString<T, S>;
enum MyEnum {
One,
Two
};
constexpr EnumToString enumStrings = {{{ //<---- does not compile without explicit types
{One, "One"},
{Two, "Two"}
}}};
- Почему компилятор не может самостоятельно вывести параметры EnumToString в конструкторе?
- Почему руководство пользователя по выводам не помогает?