This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/48350] New: make_tuple() on empty tuples does not compile
- From: "tinlyx at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 30 Mar 2011 03:19:03 +0000
- Subject: [Bug c++/48350] New: make_tuple() on empty tuples does not compile
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48350
Summary: make_tuple() on empty tuples does not compile
Product: gcc
Version: 4.5.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: tinlyx@gmail.com
Created attachment 23810
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=23810
the example
g++ 4.5.2 cannot create a unary tuple that contains an empty tuple (i.e.
tuple<>() ) as the content. Minimal code example is as follows:
//a.cpp
#include <tuple>
using namespace std;
int main() {
auto te = make_tuple();
auto tte = make_tuple(te);
return 0;
}
////
Compiling the above generates an error about
invalid static_cast from type 'std::tuple<>' to type 'const
std::_Tuple_impl<0u>&'
Detailed compiler output is below:
$ gcc -v -save-temps -std=c++0x a.cpp
Using built-in specs.
COLLECT_GCC=C:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.5.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.5.2/configure
--enable-languages=c,c++,ada,fortran,obj
c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared
--enable-libgo
mp --disable-win32-registry --enable-libstdcxx-debug
--enable-version-specific-r
untime-libs --disable-werror --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.5.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++0x' '-mtune=i386' '-march=i386'
c:/mingw/bin/../libexec/gcc/mingw32/4.5.2/cc1plus.exe -E -quiet -v -iprefix
c:\
mingw\bin\../lib/gcc/mingw32/4.5.2/ a.cpp -mtune=i386 -march=i386 -std=c++0x
-fp
ch-preprocess -o a.ii
ignoring nonexistent directory
"c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../.
./mingw32/include"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/inclu
de/c++"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/inclu
de/c++/mingw32"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/inclu
de/c++/backward"
ignoring duplicate directory "/mingw/lib/gcc/mingw32/4.5.2/../../../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/inclu
de"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/inclu
de-fixed"
ignoring nonexistent directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.5.2/../
../../../mingw32/include"
ignoring duplicate directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/mingw32
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/backward
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include-fixed
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++0x' '-mtune=i386' '-march=i386'
c:/mingw/bin/../libexec/gcc/mingw32/4.5.2/cc1plus.exe -fpreprocessed a.ii
-quie
t -dumpbase a.cpp -mtune=i386 -march=i386 -auxbase a -std=c++0x -version -o a.s
GNU C++ (GCC) version 4.5.2 (mingw32)
compiled by GNU C version 4.5.2, GMP version 5.0.1, MPFR version 2.4.1,
MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (GCC) version 4.5.2 (mingw32)
compiled by GNU C version 4.5.2, GMP version 5.0.1, MPFR version 2.4.1,
MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: bba7c68567cab1560329ee702fa8a945
In file included from a.cpp:1:0:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple: In constructor
'std::tu
ple<_Elements>::tuple(std::tuple<_UElements ...>&) [with _UElements = {},
_Eleme
nts = {std::tuple<>}]':
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple:551:62: instantiated
f
rom 'std::tuple<typename std::__decay_and_strip<_Elements>::__type ...>
std::mak
e_tuple(_Elements&& ...) [with _Elements = {std::tuple<>&}, typename
std::__deca
y_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
s
tatic_cast from type 'std::tuple<>' to type 'const std::_Tuple_impl<0u>&'