Итак, я изучал Sfinae и как работает std ::: enable_if. На CPPREEFEREFERE есть следующий пример шаблонов функций перегрузки, и я не понимаю, почему он работает.
/* WRONG */
struct T
{
enum { int_t, float_t } type;
template
T(Integer) : type(int_t) {}
template
T(Floating) : type(float_t) {} // error: treated as redefinition
};
/* RIGHT */
struct T
{
enum { int_t, float_t } type;
template
T(Integer) : type(int_t) {}
template
T(Floating) : type(float_t) {} // OK
};
< /code>
Мои мысли: cppreference говорит, что аргументы шаблона по умолчанию не рассматриваются во время проверки эквивалентности шаблона, поэтому я предполагаю, что компилятор просто видит шаблон для обоих шаблонов функций, и мы получаем ошибку переопределения. видит шаблон
Подробнее здесь: [url]https://stackoverflow.com/questions/79641044/overloading-function-templates-difference[/url]
Итак, я изучал Sfinae и как работает std ::: enable_if. На CPPREEFEREFERE есть следующий пример шаблонов функций перегрузки, и я не понимаю, почему он работает.[code]/* WRONG */
template T(Floating) : type(float_t) {} // OK }; < /code> Мои мысли: cppreference говорит, что аргументы шаблона по умолчанию не рассматриваются во время проверки эквивалентности шаблона, поэтому я предполагаю, что компилятор просто видит шаблон для обоих шаблонов функций, и мы получаем ошибку переопределения. видит шаблон