Это , а не дубликат этого вопроса .
Ниже я перечислю свой базовый класс, а также то, как я получаю класс из него:
template<template<size_t, typename...> typename D>
struct Modifier
{
// some static variables
};
template<typename M, size_t U, typename T, typename... S>
struct Base
{
// some implementations
};
template<size_t U, typename T>
struct Derived;
template<>
struct Modifier<Derived>;
template<size_t U, typename T>
struct Derived : Base<Modifier<Derived>, U, T, double>
{
using Base<Modifier<Derived>, U, T, double>::Base;
};
Чтобы обеспечить некоторый контекст, идея состоит в том, что реализация Base
будет обращаться к некоторым статическим переменным из M
, чтобы изменить поведение пары функций.
Когда я компилирую это с помощью msvc (build tools v142), он жалуется на:
1>...: error C3210: 'Base<Modifier<Derived<2,unsigned __int64> >,2,unsigned __int64,double>': a member using-declaration can only be applied to a base class member
1>...: error C3881: can only inherit constructor from direct base
Тем не менее, когда я ввожу using mod_t = Modifier<Derived>;
и применяю это вместо реализации Derived
полного имени правильно компилируетсявсе равно получит ошибку.
Что мне здесь не хватает?