Jsem zmaten, jaký typ decltype
funkce. Není to ani ukazatel funkce ani functor. Jak ji mohu používat? A proč plné šablony specializace zde nevyžaduje const
kvalifikace.
class SomeClass
{
public:
template <typename T>
void insideTemplateMethod(const T & value)
{
}
};
template
void SomeClass::insideTemplateMethod<decltype(std::hex)>(decltype(std::hex) & ); // no need to specify const
template
void SomeClass::insideTemplateMethod<int>(int &); // error, must specify const
int main(void)
{}
kdybych odstranit &
, ale pak si stěžuje, že
error: template-id 'insideTemplateMethod<std::ios_base&(std::ios_base&)>' for 'void SomeClass::insideTemplateMethod(std::ios_base& (*)(std::ios_base&))' does not match any template declaration
Look se decltype(std::hex)
v parametru pole odečtena std::ios_base& (*)(std::ios_base&)
, zatímco je odečtena std::ios_base&(std::ios_base&)
v parametru šablony.
Mohl byste prosím, pomozte mi to pochopit?