Здесь контекст полиморфности ожидает 'Derived' от 'Base &.
Учитывая
class P { };
class Q : public P { };
auto operator + (const P& p, int x) -> DYNAMIC_DECLTYPE(P) {
DYNAMIC_DECLTYPE(P) p2(p);
p2.func(x);
return p2;
}
Есть ли способ заставить работать DYNAMIC_DECLTYPE? Я хочу использовать эту форму вместо
template <typename T> T operator + (const T& t, int x)
или иметь потенциально длинный список
if (!strcmp(typeid(p).name(), typeid(derived()).name()) { ... }
потому что последний нельзя использовать для ограничения T на P или его подклассов (докажите, что я не прав, если это возможно).