关于向量和元组的奇怪的编译错误

时间:2019-04-13 06:46:46

标签: c++ g++

我在编译以下代码时遇到问题。

#include <tuple>
#include <vector>

using namespace std;
using Parameter = tuple<int, char[2]>; // compilation fails
//using Parameter = tuple<char[2], int>; // compilation successes

int main() {
    vector<Parameter> v;
    Parameter r;
    v.push_back(r);

    return 0;
}

使用g ++进行编译时出现这些编译错误:

/usr/include/c++/7/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = char [2]; long unsigned int _Idx = 1; _Head = char [2]]’:
/usr/include/c++/7/tuple:373:49:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = char [2]]’
/usr/include/c++/7/type_traits:1202:12:   required from ‘struct std::__is_nt_constructible_impl<std::_Tuple_impl<1, char [2]>, std::_Tuple_impl<1, char [2]>&&>’
/usr/include/c++/7/type_traits:143:12:   required from ‘struct std::__and_<std::is_constructible<std::_Tuple_impl<1, char [2]>, std::_Tuple_impl<1, char [2]>&&>, std::__is_nt_constructible_impl<std::_Tuple_impl<1, char [2]>, std::_Tuple_impl<1, char [2]>&&> >’
/usr/include/c++/7/type_traits:1214:12:   required from ‘struct std::is_nothrow_constructible<std::_Tuple_impl<1, char [2]>, std::_Tuple_impl<1, char [2]>&&>’
/usr/include/c++/7/type_traits:1245:12:   required from ‘struct std::__is_nothrow_move_constructible_impl<std::_Tuple_impl<1, char [2]>, true>’
/usr/include/c++/7/type_traits:1251:12:   [ skipping 17 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/c++/7/bits/move.h:103:12:   required from ‘struct std::__move_if_noexcept_cond<std::tuple<int, char [2]> >’
/usr/include/c++/7/bits/stl_iterator.h:1217:26:   required by substitution of ‘template<class _Tp, class _ReturnType> _ReturnType std::__make_move_if_noexcept_iterator(_Tp*) [with _Tp = std::tuple<int, char [2]>; _ReturnType = const std::tuple<int, char [2]>*]’
/usr/include/c++/7/bits/stl_uninitialized.h:311:3:   required from ‘_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = std::tuple<int, char [2]>*; _ForwardIterator = std::tuple<int, char [2]>*; _Allocator = std::allocator<std::tuple<int, char [2]> >]’
/usr/include/c++/7/bits/vector.tcc:426:6:   required from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const std::tuple<int, char [2]>&}; _Tp = std::tuple<int, char [2]>; _Alloc = std::allocator<std::tuple<int, char [2]> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::tuple<int, char [2]>*, std::vector<std::tuple<int, char [2]> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::tuple<int, char [2]>*]’
/usr/include/c++/7/bits/stl_vector.h:948:21:   required from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::tuple<int, char [2]>; _Alloc = std::allocator<std::tuple<int, char [2]> >; std::vector<_Tp, _Alloc>::value_type = std::tuple<int, char [2]>]’
main.cpp:11:18:   required from here
/usr/include/c++/7/tuple:133:42: error: array used as initializer
: _M_head_impl(std::forward<_UHead>(__h)) { }

使用MSVC编译器进行编译是可以的。为什么不能用g ++编译?

编辑

我的g ++编译器版本为7.3.0。

0 个答案:

没有答案