2012-06-04 9 views
5

Clang 3.1 kullanıcı tanımlı sözcükleri desteklediğini iddia eder. Bunu tanımlayabiliriz:Clang 3.1 ve kullanıcı tanımlı hazır değerler

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

ama kullanmaya çalıştığınızda bir hata alıyorum:

int m = 5_tryit; 

Invalid suffix '_tryit' on integer constant

+4

Nasıl int int = 5.0_tryit; '? – ildjarn

+2

İstihbaratınıza hakaret ediyorsam özür dilerim, ama… C++ 11 modu yerine C++ 11 modunda derlediğimde veya 3.1 yerine clang-3.0 kullandığımda aldığım hataya benziyor. 3.1'in C++ 11 modunda bir son ekini kötüye kullandığımda aldığım hataların. Doğru sürümü ve -std bayrağını kullandığınızdan emin misiniz? – abarnert

cevap

7

5 dolaylı sizin durumunuzda bir long double dönüştürülebilir edilemez.

int m = 5.0_tryit; 

VEYA

int n = operator"" _tryit(5); 

( clang version 3.1 (trunk) (llvm/trunk 155821) hem test): Çalışmak için örtülü dönüşüm için kendinizi uzun çift yapmak için 5.0 olarak değiştirin veya açıkça işlevini çağırmak gerekir

This SO question, kuralların iyi bir açıklamasına sahiptir.

(Ayrıca, abartı olarak, derleme sırasında derleyiciye -std=c++11 bayrağını geçirdiğinizden emin olun).

+0

Ama bu çalışır: cout << operatör "" _tryit (5) << endl; – John

+0

Ve "5.0_tryit" yok. – John

+0

@John: Ben clang 3.1 ile int int = = 5.0_tryit 'i test ettim ve benim için çalıştı. –