2012-12-19 15 views
10

Đây có phải là trường hợp khác, nơi các khoảng trống trong C++ hay là lỗi trình biên dịch? Mã sau có đúng cú pháp không?Một trường hợp khác mà khoảng trắng có vấn đề (có thể?)

#include <type_traits> 

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

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

Trình soạn thảo Intel C++ không biên dịch được thông báo: "kết hợp các kiểu số không hợp lệ". Nhưng thêm khoảng trống đơn trong chữ ký và nó chỉ biên soạn:

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

Vâng, nó không được coi là ' = 0)> ' – irrelephant

Trả lời

18

Đó là trường hợp khoảng trắng quan trọng. Trình biên dịch sẽ khớp với biểu tượng lớn nhất có thể, vì vậy nó phù hợp với >=. Khoảng trắng làm cho nó phân tích cú pháp như bạn dự định.

Các vấn đề liên quan