Я экспериментировал с кортежами и столкнулся с проблемой создания кортежей.
Пример кода выглядит следующим образом.
//a.cpp
#include <tuple>
using namespace std;
int main() {
auto te = make_tuple(); //this line is ok
auto tte = make_tuple(te); //this line gives an error.
return 0;
}
Я скомпилировал его как с g ++ 4.5 (g ++ -std = c ++ 0x a.cpp), так и с MS VC ++ 2010.
Оба компилятора выдают ошибку во второй строке в main ().
Мой вопрос такой:
Поскольку 'te' является четко определенной переменной, почему нельзя создать другой кортеж, в котором te является содержимым. Правильна ли эта семантика?
Полагаю, это своего рода граничный случай, но если арифметика верна, то следует разрешить ноль, ИМХО.
К вашему сведению, сообщение об ошибке от gcc:
$ gcc -std=c++0x a.cpp
In file included from a.cpp:1:0:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple: In constructor
'std::tuple<_Elements>::tuple(std::tuple<_UElements ...>&) [with _UElements = {},
_Elements = {std::tuple<>}]':
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple:551:62: instantiated from
'std::tuple<typename std::__decay_and_strip<_Elements>::__type ...>
std::make_tuple(_Elements&& ...) [with _Elements = {std::tuple<>&}, typename
std::__decay_and_strip<_Elements>::__type = <type error>]'
a.cpp:6:27: instantiated from here
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple:259:70: error: invalid
static_cast from type 'std::tuple<>' to type 'const std::_Tuple_impl<0u>&'