Я пытаюсь сделать общий код, который вызовет ошибку компиляции, если B не является предком D. То, что я придумал:Шаблон аргумент после оператора разрешения области видимости не замещается
template<typename B, typename D>
struct assert_base_of {
enum {value = sizeof(B::D)};
}
Это не работает. Когда я называю 'это так:
assert_base_of<A2,A1>::value;
Я получаю следующее сообщение об ошибке (г ++ 4.8.2):
main.cpp:16:22: error: ‘D’ is not a member of ‘A2’
Похоже, что параметр шаблона D не получает Заменен A1. Может ли кто-нибудь объяснить и предложить решение, пожалуйста?
Что неправильно с 'static_assert (std :: is_base_of :: значение,« B должно быть базой D »)'? –
Мне не разрешено использовать std :: is_base_of, и даже если бы я мог, я все еще хочу знать, почему D не поддается замене :) – pyx
«Разрешено» кем? Если кто-то поставил произвольные ограничения на ваш возможный набор решений, вы должны указать их в вопросе, чтобы избежать потенциально тратить наше время. –