Вычет шаблона в dynamic_cast

У меня есть класс, который определяется следующим образом:

template <class WidgetType>
class CometWidget : public WidgetType;

Внутри функции я делаю это:

dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();

и это решает CometWidget Тип, соответствует и работает правильно.
Код работает внутри CometWidget учебный класс.

Как на земле это происходит?
Почему это так? Должен ли он даже компилироваться?

2 ответа

Решение

Если это внутри декларации CometWidget тогда вам не нужно явно определять шаблон (или любой другой термин, который вы используете, чтобы сказать CometWidget<...>).

Очень интересно на самом деле. Это кажется мне интересной ошибкой компилятора.

Можно вывести правильный аргумент шаблона CometWidget<> - точно так же, как вы можете вывести параметры шаблона функции из списка аргументов. Если бы это было статическое приведение, это было бы менее удивительно.

При динамическом приведении между исходным и целевым типами мало что общего. Таким образом, такое "угадывание" могло произойти, но тогда оно не является правомерным.

Что это за компилятор?

Другие вопросы по тегам