2016-07-16 15 views
5
#include <type_traits> 

template<int n> 
std::enable_if_t<n == 1, int> f() {} 
// OK 

template<int n> 
std::enable_if_t<n > 1, int> g() {} 
// VS2015 : error C2988: unrecognizable template declaration/definition 

int main() 
{} 

Wiem, że błąd spowodowany jest tym, że kompilator przyjmuje znak "większy niż" "> jako znak zakończenia szablonu.Jak używać wyrażeń porównawczych w szablonach C++?

Moje pytanie brzmi: w takim przypadku, w jaki sposób uczynić wyrażenie porównania legalne?

Odpowiedz

7

Umieść wyrażenie w nawiasie:

#include <type_traits> 

template<int n> 
std::enable_if_t<(n == 1), int> f() { } 

template<int n> 
std::enable_if_t<(n > 1), int> g() { } 

int main() { } 
Powiązane problemy