Вычет шаблона в dynamic_cast
У меня есть класс, который определяется следующим образом:
template <class WidgetType>
class CometWidget : public WidgetType;
Внутри функции я делаю это:
dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();
и это решает CometWidget
Тип, соответствует и работает правильно.
Код работает внутри CometWidget
учебный класс.
Как на земле это происходит?
Почему это так? Должен ли он даже компилироваться?
2 ответа
Если это внутри декларации CometWidget
тогда вам не нужно явно определять шаблон (или любой другой термин, который вы используете, чтобы сказать CometWidget<...>
).
Очень интересно на самом деле. Это кажется мне интересной ошибкой компилятора.
Можно вывести правильный аргумент шаблона CometWidget<> - точно так же, как вы можете вывести параметры шаблона функции из списка аргументов. Если бы это было статическое приведение, это было бы менее удивительно.
При динамическом приведении между исходным и целевым типами мало что общего. Таким образом, такое "угадывание" могло произойти, но тогда оно не является правомерным.
Что это за компилятор?