Что за конструкция у второго шаблона? Что это значит? template<typename T> struct Raw { T value; }; template<typename T> Raw(T) -> Raw<T>;
И насколько это корректно использовать понятие инвариантности в контексте шаблонов, а не конечных инстансов?