Существует несоответствие типа / значения, по крайней мере, оно должно быть MixedMixins::template InnerMixin...
.Однако GCC все еще отвергает это, и я не нашел способа уговорить его.К сожалению, мне трудно доказать, что такое расширение пакета действительно допустимо.Надеемся, что кто-то, кто разбирается в грамматике, сможет ответить на этот вопрос.
При более "боковом" подходе, вы вообще рассматривали параметры шаблона с отбрасыванием?Мало того, что это может облегчить боль синтаксиса, но вы все равно можете «перепривязать» параметры шаблона специализации шаблона:
// We accept two types, a template specialization and
// a sequence of would be template parameters.
template<typename Specialization, typename T>
struct rebind;
template<
template<typename...> class Template
, typename... Old
template<typename...> class Sequence
, typename... T
>
struct rebind<Template<Old...>, Sequence<T...>> {
using type = Template<T...>;
};
template<typename S, typename... T>
using Rebind = typename rebind<S, T...>::type;
Например, Rebind<std::vector<int>, std::tuple<double, std::allocator<double>>
- это std:vector<double>
.Объедините это с утилитой parameters_of
/ ParametersOf
для извлечения параметров шаблона специализации, например, std::tuple
.
. В качестве заявления об отказе я сам долгое время не использовал эти методы, но яЯ уже оценил, как я могу ограничить болевые точки параметров шаблона шаблона несколькими централизованными точками моего кода.