2016-01-01 9 views
8
strdata->std::string::~string();  

यहाँ त्रुटि मैं मिलता है की अनुमति नहीं है काढ़ा पीछा कर रहा है:मैक जीसीसी बुला std :: स्ट्रिंग :: ~ स्ट्रिंग स्पष्ट

जीसीसी --version साथ कॉन्फ़िगर: उपसर्ग =/Library/डेवलपर/CommandLineTools/usr --with-gxx-शामिल-dir =/usr/शामिल/C++/4.2.1 ऐप्पल एलएलवीएम संस्करण 7.0.2 (क्लैंग -700.1.81) टैर्ग एट: x86_64-सेब के darwin15.2.0 थ्रेड मॉडल: POSIX

मैं ~ स्ट्रिंग() हेडर फाइल में कहीं भी परिभाषित नहीं पा सके। मैं इसे निम्नानुसार बदल रहा हूं और यह काम करता है। मेरे उपयोग के मामले में अभी ठीक है।

strdata->std::string::~basic_string(); 

यह मूल सही लगता है और लिनक्स और सीवाईजीविन पर जीसीसी में पूरी तरह से काम करता है। यह मुद्दा क्या है जो इसे मैक पर काम करने से रोक रहा है? टेम्पलेट्स? कुछ और?

+0

विनाशक को बुलाकर आम तौर पर गलत लगता है ... बदबू आ रही है। (और हाँ, 'std :: string' आमतौर पर' std :: basic_string <...> ' –

+0

के लिए एक उपनाम है, मुझे विनाशक को कॉल करने की आवश्यकता है क्योंकि इस मामले में मैं अपना स्वयं का मेमोरी प्रबंधन कर रहा हूं (यानी नए स्थान के माध्यम से) – YasserAsmi

+3

एक आवंटक की आपूर्ति करना बेहतर विकल्प नहीं होगा? आखिरकार, यह वही है ... –

उत्तर

2

यह एक पूरा जवाब नहीं है। किसी कारण से, using namespace std; काम करता है, लेकिन बिना clang विफल रहता है। इस उदाहरण पर विचार:

#include <new> 
#include <type_traits> 

namespace foo { 

struct A {}; 
typedef A A_t; 

} 

int main() { 
    std::aligned_storage<sizeof(foo::A)>::type storage; 

    foo::A_t* obj = new(&storage) foo::A; 

    using namespace foo; // Without this line, clang fails. 
    obj->foo::A_t::~A_t(); 
} 

using namespace foo; लाइन के बिना, बजना एक त्रुटि expected the class name after '~' to name a destructor दे देंगे। लेकिन उस लाइन के साथ, यह काम करता है। std::string को यह विस्तार:

#include <new> 
#include <type_traits> 
#include <string> 

int main() { 
    std::aligned_storage<sizeof(std::string)>::type storage; 

    std::string* obj = new(&storage) std::string; 

    using namespace std; // Without this line, clang fails. 
    obj->std::string::~string(); 
} 

यह काम करता है। यह संकुचित using std::string; के साथ भी काम करता है।

यह के प्रश्न का उत्तर नहीं देता है क्योंclang विफल रहता है। मुझे नहीं पता कि यह clang में या gcc में एक बग है या नहीं। लेकिन कम से कम एक कामकाज मौजूद है।

यह clang में एक बग के रूप में इस रिपोर्टिंग, और फिर उन्हें तय किया जाए या नहीं यह वास्तव में एक बग है लायक हो सकता है।

+0

धन्यवाद।Clang के साथ एक बग फाइलिंग ... उन्होंने सुझाव दिया है कि एक मौजूदा बग के रूप में https://llvm.org/bugs/show_bug.cgi?id=5548 तय किया गया है। लेकिन वह 200 9 में था। – YasserAsmi

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