Здравствуйте, AlexGin, Вы писали:
AG>Фичи языка — это твои друзья, а НЕ враги!
AG>Кстати, открою тебе маленький секрет — применение конструкции if constexpr из набора C++17 —
AG>позволяет работать с шаблонами удобнее, чем раньше!!!
AG>Вот простой пример:
AG>AG>template <typename C>
AG>void print (const C &c)
AG>{
AG> if constexpr (std::is_same_v<C, std::vector<int>>) {
AG> cout << "vector<int>: ";
AG> }
AG> if constexpr (std::is_same_v<C, std::list<int>>) {
AG> cout << "list<int>: ";
AG> }
AG> if constexpr (std::is_same_v<C, std::deque<int>>) {
AG> cout << "deque<int>: ";
AG> }
AG> for (auto i : c)
AG> {
AG> cout << i << ", ";
AG> }
AG> cout << '\n';
AG>}
AG>
AG>Архитектура кода — только выигрывает от применения современных возможностей языков программирования.
AG>Так, применение приведенного выше метода, позволит тебе забыть о трудно-понимаемом SFINAE
абсолютно синтетический пример, при этом а) все типы, которые ф-я поддерживают должны перечисляться внутри и б) std::vector<int, myalloc> уже не пройдет, я уже молчу про std::array
ну и я бы запилил такое на typeid::name и abi::__cxa_demangle (для gcc, clang)