2013-07-19 13 views
6

C++ standart kitaplığının bir önişlemci yönergesi kullanarak C++ 11 desteğine sahip olup olmadığını belirlemek mümkün mü?C++ 11 Standart kitaplığını algılamak için bir önişlemci yönergesi var mı?

Şu anda C++ 11 desteği (bu olmayan C++ 11 ile bağlantı gerekiyor olmadan standart kütüphane ++ ancak C ile, C++ 11 dil lehçesini kullanan bir proje üzerinde çalışıyorum

kütüphaneler).

C++ 11 desteğini #if __cplusplus >= 201103L kullanarak test edebileceğimin farkındayım, ancak durumumda bu durum doğru olarak değerlendirilecektir. C++ 11 için C++ standart kütüphane desteğini bilmem gerekiyor.

+1

İlgili: http://stackoverflow.com/q/11886288/743214 –

+1

* "C++ 11 desteğini" #if __cplusplus> = 201103L "kullanarak test edebileceğimin farkındayım * * - Hayır , o bile değil. En derleyiciler sadece (gerçi, alt küme olabileceğini ancak büyük) C++, 11 bir alt kümesini destekledikleri göz önüne alındığında, bu '__cplusplus' makro düpedüz işe yaramaz. (* TemplateRex * onun cevabını işaret ettiği gibi, * girişimleri bu yoldalar çözmek için * rağmen) portably standart özellikler (dil veya kütüphane olsun) hala çözülmemiş bir sorundur için test. –

+1

Bana göre, sorununuz CMake veya autotools gibi bir yapılandırma aracına ihtiyacınız olduğu gibi geliyor. Sizin için kontroller yapar ve değerlendirebileceğiniz Makroları içeren bir başlık oluştururlar. Yalnızca bir kitaplığınız varsa, kullanıcılarınızdan makro sağlama - hala kötü bir çözüm sağlamalarını isteyebilirsiniz. – usr1234567

cevap

3

Test Standart Komitesi sonraki C++ 14 Standardı (ve bunun ötesinde) doğru gidiş için aktif bir araştırma yönüdür: komple kod olarak sona erdi. Mevcut gelişmenin tartışıldığı kendi serbestçe erişilebilen mailinglist ile bir Çalışma Grubu 10 var. Bir sonraki toplantı için, bu N3694 working paper gönderildi.

3

Sorunum, iOS platformunda, C++ standart kitaplığı seçiminin libstd++ (GNU C++ standard library) ve libc++ (LLVM C++ standard library with C++11 support) arasında olduğu sorunuydu. Ben _GLIBCXX_ kullanarak bitti. özellikler için

#ifndef _GLIBCXX_ 
template <class T> 
T&& move (T& arg) noexcept { 
    return static_cast<T&&>(arg); 
} 
#endif 
+1

"__GLIBCXX__" kastediyorsunuz ve if ifef 'ifdef' demek istiyor musunuz? Testiniz ++ libstdc asla C++ 11 desteğine sahip olduğunu varsayar, ama bu Mac hiçbir C++ 11 desteği vardır senin ile gelir tek antik sürümü doğru değil. –

+0

... bir yıl sonra ... Aslında standart kitaplığın otomatik denetimine güvenmek yerine kendi manuel önişlemci tanımlarımı kullanarak sona erdi. – Mortennobel

İlgili konular