2013-04-04 8 views
24

जी ++ 4.7.2 को लागू करता है std::set::emplace के रूप में सी ++ 11 स्टैंडर्ड द्वारा परिभाषित और here दस्तावेज?std ::, सेट कोई भी सदस्य क़ायम करना है

मैं निम्नलिखित छोटे से परीक्षण का मामला लिखा है:

#include <set> 
#include <string> 

struct Foo 
{ 
    std::string mBar; 
    bool operator<(const Foo& rhs) const 
    { 
     return mBar < rhs.mBar; 
    } 
    Foo(const std::string bar) : mBar(bar) {}; 
}; 

typedef std::set<Foo> Foos; 

int main() 
{ 
    Foos foos; 
    foos.emplace(std::string("Hello")); 
} 

G के अंतर्गत ++ 4.7.2, इस संकलन करने में विफल रहता है:

[[email protected] hacks]$ g++ -o main.o -std=c++0x -c main.cpp 
main.cpp: In function ‘int main()’: 
main.cpp:19:10: error: ‘Foos’ has no member named ‘emplace’ 

इसके अलावा IDEOne के तहत संकलित करने के लिए विफल रहता है, लेकिन यह के अंतर्गत संकलित करता है एमएसवीसी 2012 अपडेट 1.

उत्तर

26

It is not implemented in gcc 4.7.2.

कुछ स्पष्टीकरण नहीं है:

बस थोड़ा स्पष्ट करने के लिए: यह एक निरीक्षण नहीं था। हमारे पास गंदा ड्राफ्ट सी ++ 0x मानक में std :: जोड़ी के साथ समस्या है, जो अनिवार्य रूप से emplace_ * सदस्यों को std :: map, std :: multimap, आदि को मौजूदा उपयोगकर्ता को तोड़ने के बिना असंभव बना दिया गया कोड। इस प्रकार हम , उस पर इंतजार कर रहे थे जब तक बातें इस पूरे क्षेत्र में स्पष्ट किया गया। अब यह वास्तव में उन सुविधाओं पर काम करना संभव है।

आपका कोड gcc 4.8.0 के साथ अच्छी तरह से संकलित करता है, LWS देखें।

5

emplace() एसोसिएटिव कंटेनर के लिए जीसीसी 4.7.0 के तहत जीसीसी 4.8.0 के लिए libstdc++ में जोड़ा गया था I टी काम नहीं करेगा।

संबंधित मुद्दे