ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

递归boost :: variant类型不能使用“-std = c 11 -stdlib = libc”进行编译

2019-08-26 06:05:56  阅读:169  来源: 互联网

标签:c c11 clang compiler-errors boost


请考虑以下代码:

#include <vector>
#include <boost/variant.hpp>

struct foo;

typedef boost::variant<foo> bar;

struct foo
{
    std::vector<bar> baz;
};

int main ()
{
    foo f;
    return 0;
}

使用Xcode 4.4在Mac OS X上构建(我通过Homebrew安装了1.50.0增强版):

> clang test.cc:没有错误.
> clang -stdlib = libc test.cc:没有错误.
> clang -std = c 11 test.cc:没有错误.
> clang -std = c 11 -stdlib = libc test.cc:很多错误!

/usr/local/include/boost/type_traits/has_nothrow_constructor.hpp:24:40: error: incomplete type 'foo' used in type trait expression
   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_CONSTRUCTOR(T));
                                       ^
...snip...
test.cc:10:19: note: in instantiation of template class '...snip...' requested here
        std::vector<bar> baz;
                         ^
test.cc:8:8: note: definition of 'foo' is not complete until the closing '}'
struct foo
       ^

/usr/local/include/boost/mpl/next_prior.hpp:31:22: error: type 'int' cannot be used prior to '::' because it has no members
    typedef typename T::next type;
                     ^
test.cc:10:19: note: in instantiation of template class '...snip...' requested here
        std::vector<bar> baz;
                         ^

/usr/local/include/boost/mpl/sizeof.hpp:27:20: error: invalid application of 'sizeof' to an incomplete type 'foo'
    : mpl::size_t< sizeof(T) >
                   ^~~~~~~~~

test.cc:10:19: note: in instantiation of template class '...snip...' requested here
        std::vector<bar> baz;
                         ^
test.cc:8:8: note: definition of 'foo' is not complete until the closing '}'
struct foo
       ^

...big snip...

8 errors generated.

这里发生了什么?为什么我不能用指定的选项编译它?有什么方法可以解决这个问题吗?

解决方法:

升压:: recursive_wrapper&LT FOO&GT是处理不完整类型的工具,同时仍保持对例如不完整类型的错觉.访客认为一个变种真的有一个foo.

标签:c,c11,clang,compiler-errors,boost
来源: https://codeday.me/bug/20190826/1727094.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有