2012-06-04 25 views
5

Tuyên bố Clang 3.1 để hỗ trợ các chữ cái do người dùng xác định. Tôi có thể định nghĩa này:Clang 3.1 và các chữ số do người dùng xác định

int operator"" _tryit(long double n) { return int(n); } 

nhưng khi tôi cố gắng sử dụng nó, tôi nhận được một lỗi:

int m = 5_tryit; 

Invalid suffix '_tryit' on integer constant

+4

Làm thế nào về 'int m = 5.0_tryit;'? – ildjarn

+2

Xin lỗi nếu tôi xúc phạm trí thông minh của bạn, nhưng… trông giống như lỗi tôi nhận được khi tôi biên dịch ở chế độ C++ 03 thay vì chế độ C++ 11 hoặc khi tôi sử dụng clang-3.0 thay vì 3.1, không giống như bất kỳ các lỗi tôi nhận được khi lạm dụng hậu tố trong chế độ C++ 11 của 3.1. Bạn có chắc chắn bạn đang sử dụng đúng phiên bản và cờ -std không? – abarnert

Trả lời

7

5 không thể được ngầm chuyển đổi sang một long double trong trường hợp của bạn. Bạn cần phải thay đổi nó để 5.0 để làm cho nó dài gấp đôi hoặc dứt khoát gọi hàm mình cho việc chuyển đổi ngầm để làm việc:

int m = 5.0_tryit; 

HOẶC

int n = operator"" _tryit(5); 

(thử nghiệm cả với clang version 3.1 (trunk) (llvm/trunk 155821))

This SO question có giải thích tốt về các quy tắc.

(Ngoài ra, như đề cập abarnert, hãy đảm bảo bạn đang chuyển cờ -std=c++11 tới trình biên dịch khi biên dịch).

+0

Nhưng công trình này: cout << operator "" _tryit (5) << endl; – John

+0

Và "5.0_tryit" thì không. – John

+0

@ John: Tôi vừa thử nghiệm 'int m = 5.0_tryit;' với clang 3.1 và nó làm việc cho tôi. –

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