Я узнал о c ++ 17 s auto
параметров шаблона в ответе на этот вопрос . Коллега сообщил мне, что они поддерживаются на visual-studio-2017 , но я, кажется, был менее чем успешен в моей попытке использовать эту функциональность. Я написал этот игрушечный пример, чтобы продемонстрировать мою проблему:
struct Foo {
int mem;
};
template <auto T>
decltype(T(Foo{})) bar(const Foo& param)
{
return T(param);
}
int func(const Foo& param) { return param.mem; }
int main() {
Foo myFoo{ 13 };
cout << bar<&func>(myFoo);
}
Я считаю, что это хороший код, так как он отлично работает на gcc В Visual Studio, однако я получаю следующее:
ошибка C3533: параметр не может иметь тип, который содержит auto
Я гарантировал, что мой "Стандарт языка C ++" установлен на: "Последний проект стандарта ISO C ++ (/ std: c ++ последний)", но это, похоже, не решает проблему. Visual Studio будет поддерживать код параметра шаблона до auto
, который требует, чтобы я передавал тип функции вместе с функцией в качестве аргументов шаблона: template <typename R, R(*T)(const Foo&)> R bar(const Foo& param)
Но это не соответствует элегантности параметра шаблона auto
.
Можно ли как-нибудь помочь Visual Studio скомпилировать код шаблона auto
или управлять аналогичной элегантностью, все еще компилируя на visual-studio-2017 ?