Почему я не могу назначить символьные массивы в std::pair
или boost::tuple
?
typedef std::pair<int, char [5]> tuple_type;
tuple_type(5, "abcd");
Приведенное выше сообщение приводит к следующей ошибке.
error: no matching function for call to ‘std::pair<int, char [5]>::pair(int, const char [5])’
51 | tuple_type(5, "abcd");
Даже если я использую std::pair<int, const char [5]>
, ошибка сохраняется
error: no matching function for call to ‘std::pair<int, const char [5]>::pair(int, const char [5])’
Единственное решение - либоиспользуйте const char*
или std::string
Но в моей настоящей проблеме я упаковываю набор переменных аргументов в кортеж.
template <typename Ret, typename CallableT, typename... Args>
struct returned_: public Ret{
typedef boost::hana::tuple<Args...> tuple_type;
tuple_type _tuple;
const CallableT& _call;
returned_(const CallableT& call, const Args&... args): _call(call), _tuple(args...), Ret(_tuple){}
// ...
};
Так что, если код пользователя не преобразуется в const char*
или не заключает в std::string
шаблон returned_
приведет к ошибкам времени компиляции. Какое решение не заставляет пользователя не передавать строковый литерал C?