Я думал, что это очень простой вопрос, но я не мог найти что-то подобное.Почему параметр шаблона теряет константу?
Следующий код не компилируется (C3668)
struct Param
{
int a;
int b;
};
template <typename T>
struct Foo
{
virtual void doStuff (const T) const = 0;
};
struct Bar : public Foo<Param&>
{
void doStuff (const Param &) const override
{
/*...*/
}
};
Он будет собирать после удаления сопзЬ из
void doStuff (const Param &)
Что я здесь отсутствует? Я бы ожидал, что будет применен к const Param& in Foo::doStuff
с моей декларацией интерфейса. Вместо этого он, кажется, удаляется.
Верхний уровень const игнорируется в объявлениях функций. Кроме того, 'const T' будет означать' Param & const', а не 'const Param &'. –