mon*_*ani 3 clang c++11 libc++
我编译这个简单的代码时遇到错误,如果我删除了noexcept,我没有收到错误:
#include<vector>
#include<string>
class Foo
{
public:
protected:
Foo(Foo&&) noexcept = default;
Foo& operator=(Foo&&) noexcept = default;
Foo()
{
}
private:
std::vector<std::string> vectorFoo_;
};
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,我理解它是在异常规范的实例化中,但我怀疑std :: string不是不可移动构造,...第一个错误让我觉得有一个bug.
在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件中:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件: /usr/local/bin/../lib/c++/v1/vector:575:67:错误:'std :: __ 1 :: is_nothrow_move_constructible中没有名为'value'的成员,std :: __ 1 :: allocator >>> ' NOEXCEPT(is_nothrow_move_constructible ::值); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^包括/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中的文件:在文件中包括在/usr/local/bin/../lib/c++/v1/vector:264:/usr/local/bin/../lib/c++/v1/__config:325:34:注意:从宏扩展' NOEXCEPT '定义NOEXCEPT(x)noexcept(x)^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError中的文件. h:29:29:注意:在这里请求'vector'的异常规范实例化std :: vector vectorFoo_; ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:在/usr/local/bin/../lib/c++/v1/vector:265中包含的文件中:/usr/local/bin/../lib/c++/v1/__bit_reference:15中包含的文件:In文件包含在/usr/local/bin/../lib/c++/v1/algorithm:624:/ usr/local/bin/..Tp> :: type> ^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中的文件:包含在/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics中的文件/TestCompileError.h:4:/usr/local/bin/../lib/c++/v1/vector:575:20:注意:在模板类'std :: _1 :: is_nothrow_move_constructible的实例化中,std :: __ 1: :allocator >>> '在这里请求 NOEXCEPT(is_nothrow_move_constructible ::值); ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:在/usr/local/bin/../lib/c++/v1/vector:264中包含的文件中:/usr/local/bin/../lib/c++/v1/__config:325:34:注意:扩展从宏' NOEXCEPT '定义NOEXCEPT(x)noexcept(x)^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError中的文件. H:29:29:注意:在异常规范的实例在这里要求的std ::矢量vectorFoo_"矢量"; ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:/usr/local/bin/../lib/c++/v1/vector:582:58:错误:'std :: __ 1 :: is_nothrow_move_assignable,std :: __ 1 :: allocator >>中没有名为'value'的成员>'is_nothrow_move_assignable :: value);NOEXCEPT '定义NOEXCEPT(x)noexcept(x)^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError中的文件. H:29:29:注意:在关于 '操作符=' 这里请求的std ::矢量vectorFoo_异常规范的实例; ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:在/usr/local/bin/../lib/c++/v1/vector:265中包含的文件中:/usr/local/bin/../lib/c++/v1/__bit_reference:15中包含的文件:In文件包含在/usr/local/bin/../lib/c++/v1/algorithm:624:/ usr/local/bin/../lib/c ++/v1/type_traits:2760:45:注意:在实例化模板类'std :: __ 1 :: add_lvalue_reference,std :: __ 1 :: allocator >>>'这里请求:public is_nothrow_assignableTp> :: type, ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:/usr/local/bin/../lib/c++/v1/vector:582:14:注意:在模板类'std :: _ 1 :: is_nothrow_move_assignable,std :: __ 1 :: allocator >>>的实例化中这里请求is_nothrow_move_assignable :: value); ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件中:NOEXCEPT '定义NOEXCEPT(x)noexcept(x)^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError中的文件. H:29:29:注意:在关于 '操作符=' 这里请求的std ::矢量vectorFoo_异常规范的实例; ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:在/usr/local/bin/../lib/c++/v1/vector:265中包含的文件中:/usr/local/bin/../lib/c++/v1/__bit_reference:15中包含的文件:In文件包含在/usr/local/bin/../lib/c++/v1/algorithm:624:/ usr/local/bin/..Tp> :: type> ^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中的文件:包含在/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics中的文件/TestCompileError.h:4:/usr/local/bin/../lib/c++/v1/vector:575:20:注意:在模板类'std :: _1 :: is_nothrow_move_constructible的实例化中,std :: __ 1: :allocator >>> '在这里请求 NOEXCEPT(is_nothrow_move_constructible ::值); ^在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1中包含的文件:/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.h:4中包含的文件:在/usr/local/bin/../lib/c++/v1/vector:264中包含的文件中:/usr/local/bin/../lib/c++/v1/__config:325:34:注意:扩展从宏' NOEXCEPT '定义NOEXCEPT(x)noexcept(x)^包含在/Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError.cpp:1:/ Users/Mani/Development/Projects/flowOfLife/Graphics/Graphics/TestCompileError中的文件. h:29:29:注意:在这里请求'vector'的异常规范实例化std :: vector vectorFoo_;
我的编译器是从树顶部开始的.我究竟做错了什么?
谢谢
更新 Coliru上的错误.如果我没有指定libc ++而是使用stdlibc ++它会编译它.它开始看起来很像libc ++中的一个bug.
代码很好.(有趣的是,libc ++也是如此)
结果证明这是一个铿锵的错误; 事实上,最近版本的clang在尝试编译此代码时崩溃了.
目前正在测试在clang中修复此问题的修补程序,它将成为3.4版本的一部分.如果你不能等那么久,那么如果你愿意从源代码构建它,你应该能够"很快就能获得"固定版本的clang.
感谢Nuanti的Alp追踪clang bug.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |