【问题标题】:Why Clang at Coliru can't compile vector::push_back?为什么 Coliru 的 Clang 无法编译 vector::push_back?
【发布时间】:2018-11-26 04:25:00
【问题描述】:

See it here. 这个程序很平凡,就像这样:

#include <vector>

std::vector<int> bombs;

int main()
{
    bombs.push_back(42); // compile errors
}

诊断对我来说没有多大意义:

在 main.cpp:1 中包含的文件中:

在包含的文件中 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/vector:60:

在包含的文件中 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/stl_algobase。小时:64:

在包含的文件中 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/stl_pair。小时:59:

在包含的文件中 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/move.小时:55:

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits :1061:48: 错误:'_Tp' 没有引用值

  : public __bool_constant<__is_assignable(_Tp, _Up)>
                                           ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits :1059:21: 注意:这里声明

template<typename _Tp, typename _Up>
                  ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits :1061:53: 错误:_Up 没有引用值

  : public __bool_constant<__is_assignable(_Tp, _Up)>
                                                ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits :1059:35: 注意:这里声明

template<typename _Tp, typename _Up>
                                ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits :1062:5: 错误:预期的类名

{ };
^

在 main.cpp:1 中包含的文件中:

在包含的文件中 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/vector:63:

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /stl_uninitialized.h:128:70: 错误:std::is_assignable&lt;int &amp;, int &amp;&amp;&gt; 中没有名为 value 的成员

  const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /stl_uninitialized.h:289:19: 注意:在函数模板特化的实例化中 std::uninitialized_copy&lt;std::move_iterator&lt;int *&gt;, int *&gt; 已请求 这里

{ return std::uninitialized_copy(__first, __last, __result); }
              ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /stl_uninitialized.h:310:19: 注意:在函数模板特化的实例化中 std::__uninitialized_copy_a&lt;std::move_iterator&lt;int *&gt;, int *, int&gt; 在这里请求

  return std::__uninitialized_copy_a
              ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /vector.tcc:446:13: 注意:在函数模板特化的实例化std::__uninitialized_move_if_noexcept_a&lt;int *, int *, std::allocator&lt;int&gt; &gt; 此处请求

        = std::__uninitialized_move_if_noexcept_a
               ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /vector.tcc:109:4: 注意:在函数模板特化的实例化中 std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int&gt; 在这里请求

      _M_realloc_insert(end(), std::forward<_Args>(__args)...);
      ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits /stl_vector.h:1091:9: 注意:在函数模板特化的实例化中 std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; 已请求 这里

  { emplace_back(std::move(__x)); }
    ^

main.cpp:7:9: 注意:在成员函数的实例化中 std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back 在这里请求

bombs.push_back(42);
      ^

产生了 4 个错误。

与 g++ 编译相同,没有任何问题。实在看不下去 Coliru 的 Clang 包含的库头文件,用于编程以自行解决。有没有人知道什么是错的以及如何克服这个问题?

【问题讨论】:

  • 适用于 clang6,所以可能是由于使用旧的 clang 版本和较新的 libstdc++ 8.1 导致的一些错误。
  • 较新的 libstdc++ 和非常旧的 clang 之间可能不兼容。
  • @StackedCrooked 谢谢!但是经典的 Hello World 仍然没有与 Clang 链接:coliru.stacked-crooked.com/a/5518c6dd74de1e6f
  • @ÖöTiib 如果您使用 clang++ 而不是 clang,则该文件将特别编译。

标签: c++ clang++ coliru


【解决方案1】:

我 100% 不会担心这个,这只是 Coliru 的一些怪事。它在 Wandbox 上完美运行,回到 Clang 3.1

根据donations page,您可能可以将此问题报告给[电子邮件地址已编辑]。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-01-11
    相关资源
    最近更新 更多