Существует вспомогательная функция шаблона
#include <iostream>
namespace helpers {
template <typename OUT = float, typename IN>
OUT normalizeFromRange(IN v, IN min, IN max) {
return static_cast<OUT>(v - min) / static_cast<OUT>(max - min);
}
}
int main()
{
float resultFAuto = helpers::normalizeFromRange<>(10, 0, 40);
float resultF = helpers::normalizeFromRange<float>(20, 0, 40);
double resultD = helpers::normalizeFromRange<double>(30, 0, 40);
std::cout << "resultFAuto: " << resultFAuto << std::endl;
std::cout << "resultF: " << resultF << std::endl;
std::cout << "resultD: " << resultD << std::endl;
return 0;
}
приводит к
resultFAuto: 0.25
resultF: 0.5
resultD: 0.75
Она компилируется в Clang, GCC, которые я использую.C ++ 14.Я хочу построить проект также на MSVC ++, и он компилируется на онлайн-компиляторе MSVC ++ , который утверждает, что использует 19.00.23506
Но он не работает на моей машине, использующей 19.16.27027.1
, C ++14 set.
Microsoft Visual Studio Community 2017
Version 15.9.9
VisualStudio.15.Release/15.9.9+28307.518
Installed Version: Community
Microsoft Visual C++ 2017
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27027.1
с
error C2988: unrecognizable template declaration/definition
error C2059: syntax error: '('
error C2143: syntax error: missing ';' before '{'
error C2447: '{': missing function header (old-style formal list?)
Определена ли функция шаблона с неверным синтаксисом для спецификации (а GCC, Clang, некоторые версии MSVC ++ просто каким-то образом проходят)?
Или это что-то специфичное для MSVC, флаги MSVC или еще недавно специфичное для MSVC?
Что-то еще?
Существует одна похожая проблема , но мои знания о шаблонах не позволяютПосмотрите, как это применимо здесь.