strdata->std::string::~string();    
Here is the error I get:
error: '~' in destructor name should be after nested name specifier
        strdata->std::string::~string();
                              ^
I am using a cmake project... My gcc version installed via brew is following:
gcc --version Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 7.0.2 (clang-700.1.81) Target: x86_64-apple-darwin15.2.0 Thread model: posix
I couldn't find the ~string() defined anywhere in the header files. I ended up changing it as follows and that works. It is ok for my use case for now.
strdata->std::string::~basic_string();
This original seems correct and works perfectly in GCC on Linux and CYGWIN. What is the issue which is preventing it from working on mac? Templates? Something else?
This isn't a complete answer. For some reason, using namespace std; works, but without that clang fails. Consider this example:
#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();
}
Without the using namespace foo; line, clang will give an error expected the class name after '~' to name a destructor. But with that line, it works. Extending this to 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();
}
it works. It also works with the narrower using std::string;.
This doesn't answer the question of why clang fails. I don't know if it's a bug in clang or in gcc. But at least a workaround exists.
It may be worth reporting this as a bug in clang, and then letting them decide whether or not it really is a bug.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With