gpt4 book ai didi

c++ - Mac gcc 不允许显式调用 std::string::~string

转载 作者:可可西里 更新时间:2023-11-01 16:44:56 24 4
gpt4 key购买 nike

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

这是我得到的错误:

error: '~' in destructor name should be after nested name specifier
strdata->std::string::~string();
^

我正在使用 cmake 项目...我通过 brew 安装的 gcc 版本如下:

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

我在头文件的任何地方都找不到定义的 ~string() 。我最终按如下方式更改它并且有效。现在对我的用例来说没问题。

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

这个原件看起来是正确的,并且在 Linux 和 CYGWIN 上的 GCC 中工作得很好。阻止它在 mac 上工作的问题是什么?模板?还有别的吗?

最佳答案

这不是一个完整的答案。出于某种原因,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; 行,clang 将报错 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 中的错误,然后让他们决定它是否真的是错误。

关于c++ - Mac gcc 不允许显式调用 std::string::~string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com