Должен ли шаблон функции базового класса быть назначен на указатель на член-функцию

Должен ли следующий код компилироваться в C ++ 98/03?

struct Base
{
template <typename T> void func () { }
void norm() {  }
};

struct Derived : public Base { };

template <typename U>
struct Usage
{
typedef void (U::*Method)();

Usage(Method test) { }
};

int main()
{
Usage<Derived> good(&Derived::norm);

// "Error: Cannot use void(*)() to initialize Usage<Derived>." on next line
Usage<Derived> bad(&Derived::func<int>);

return 0;
}

Этот фрагмент кода отлично работал почти на каждом компиляторе, который я смог опробовать; сохранить Sun C ++ 5.11 и Sun C ++ 5.12.

Это должно быть ошибка? Если так, кто-нибудь знает, было ли это сообщено поставщику (в настоящее время Oracle)?

Редактировать:

Я приму ответ, содержащий соответствующие цитаты из документов стандартов C ++ 03 или C ++ 11. Или если вы можете предоставить информацию об ошибке в Oracle.

4

Решение

Я только что прочитал большую часть стандарта C ++ 98, глава 14. На самом деле не очень много сказано о том, какой тип является результирующим (специализированным) элементом шаблона, поэтому я предполагаю, что из этого следует, что метод шаблона не создает это ни в коем случае не метод. Если бы у меня был момент, я посмотрю, скажет ли C ++ 11 больше об этом.

Из моего общего представления о C ++ я знаю, что ваш код должен пройти — и большинство компиляторов, согласившихся с этим, также является ключом, не так ли? 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]