2012-12-19 21 views
10

Czy jest to inny przypadek, w którym spacja ma znaczenie w C++, czy jest to błąd kompilatora? Czy poniższy kod jest poprawny pod względem składniowym?Kolejny przypadek, w którym spacja ma znaczenie (być może?)

#include <type_traits> 

template <bool cond> 
using EnableIf = typename std::enable_if<cond, int>::type; 

template <int n, EnableIf<n == 1>=0> 
void func() 
{} 

Nie można skompilować programu Intel C++ Composer, mówiąc: "niepoprawna kombinacja specyfikatorów typów". Ale dodaj pojedyncze spacje do podpisu i kompilacja jest w porządku:

template <int n, EnableIf<n == 1> =0> 
void func() 
{} 
+3

Cóż, to nie powinno być ' = 0)>' – irrelephant

Odpowiedz

18

Jest to przypadek, w którym spacja ma znaczenie. Kompilator dopasuje największy symbol, jaki może, więc pasuje do >=. Biała spacja powoduje, że parsowanie odbywa się zgodnie z twoim przeznaczeniem.