Обратите внимание, что для std::is_convertible
1-й шаблонный параметр равен From
, 2-й - To
, поэтому измените порядок аргументов шаблона с
template <typename StrType,
std::enable_if_t<std::is_convertible_v<std::string, StrType>, bool> = false
>
void info(StrType s)
на
template <typename StrType,
std::enable_if_t<std::is_convertible_v<StrType, std::string>, bool> = false
// ^^^^^^^^^^^^^^^^^^^^
>
void info(StrType s)
Для 2-й перегрузки вы должны получить type
от std::remove_cv
, чтобы не использовать себя напрямую;поэтому измените
template<typename IntType,
std::enable_if_t<std::is_same_v<
typename std::remove_reference_t<typename std::remove_cv<IntType>> ,
int
>, bool> = false
>
void info(IntType s) {
на
template<typename IntType,
std::enable_if_t<std::is_same_v<
typename std::remove_reference_t<typename std::remove_cv<IntType>::type> ,
// ^^^^^^
int
>, bool> = false
>
void info(IntType s) {
или (начиная с C ++ 14)
template<typename IntType,
std::enable_if_t<std::is_same_v<
typename std::remove_reference_t<std::remove_cv_t<IntType>> ,
// ^^
int
>, bool> = false
>
void info(IntType s) {
LIVE