Biri gcc 4.5.3 kullanan ve diğeri gcc 4.6.3'e taşınan iki farklı son kullanıcı ile bir kütüphanede çalışıyorum. Kütüphane yeni C++ 11 akıllı işaretçileri (özellikle unique_ptr) kullanır ve gcc 4.5.3'te iyi derler. Ancak, bu iki sürüm arasında gcc, nullptr'yi desteklemeye başladı, böylece unique_ptr API'si standardı daha yakından eşleştirmek için değiştirildi. Şimdi Bunu yaparken aşağıdaki kod temiz (yani., bir sonraki cümle) var mı onunla ve nullptr olmadan hem çalışır, böylece yukarıda eğer ifadeyi değiştirmek için bir yol belirsizunique_ptr, nullptr ve destekleyici gcc 4.5.x ve 4.6.x
unique_ptr up(new int(30));
...
if(up == 0) // ambiguous call now to unique_ptr(int) for 0
ince gitti? Mümkün
#if defined NULLPOINTER_AVAILABLE
#define NULLPTR (nullptr)
#else
#define NULLPTR (0)
#endif
if (çalışacağımı düşünüyorum) aşağıdaki gibi bir yapılandırmak çek ve sonra bir makro önlemek istiyorum ya bu ı arıyorum davranışı almak için tek yoldur?
Örneğinizin çalıştığını (ve bu sorunla ilgili sorun bildiriminde benimki) doğru olduğundan, aslında kullandığım türlerle ilgili bir şey olması gerekir ("int" kullanmam ancak templated sınıfı kullanmama). Gördüğüm şeye neden olan daha iyi bir örnek bulabilir miyim ve görmeyeceğim. – bpw1621
@ bpw1621: Bunun gerçek türle ilgili bir şey olduğundan eminim. Onlar * MoveConstructible * ve * MoveAssignable *? Bunu, 'is_move_constructible' gibi uygun 'type_traits' üyeleriyle kontrol edebilirsiniz. – dirkgently
Onlar da türlerse, bu muğlaklığa sebep oluyor mu? Ben düşünen aşırı yük setinde hareket ettiriciyi gördüm. – bpw1621