This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/55993] New: tuple_cat not a constant expression for result size >= 3


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55993

             Bug #: 55993
           Summary: tuple_cat not a constant expression for result size >=
                    3
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: jnapoli@alum.mit.edu


Created attachment 29171
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29171
pre-processed test case

I expect the following code to compile:

#include <tuple>
struct A {};
constexpr auto tuple = std::tuple_cat( std::make_tuple( A(), A() ),
std::make_tuple( A() ) );

However, it fails with "... is not a constant expression". It looks like
tuple_cat is not a constant expression when it returns a tuple of length three
or more.


Here's the full error output:

$ g++ -v -Wall -Wextra -std=c++11 constexpr_tuple_cat.cpp
Using built-in specs.
COLLECT_GCC=C:\MinGW\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.7.2/configure
--enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions
--with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry
--enable-libstdcxx-debug --disable-build-poststage1-with-cxx
--enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.7.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-std=c++11' '-shared-libgcc'
'-mtune=i386' '-march=i386'
 c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/cc1plus.exe -quiet -v -iprefix
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/ constexpr_tuple_cat.cpp -quiet -dumpbase
constexpr_tuple_cat.cpp -mtune=i386 -march=i386 -auxbase constexpr_tuple_cat
-Wall -Wextra -std=c++11 -version -o
C:\Users\jnapoli\AppData\Local\Temp\cc2YWCJS.s
GNU C++ (GCC) version 4.7.2 (mingw32)
        compiled by GNU C version 4.7.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
ignoring nonexistent directory
"c:\mingw\bin\../lib/gcc/mingw32/4.7.2/../../../../mingw32/include"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/include/c++"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/include/c++/mingw32"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/include/c++/backward"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/include"
ignoring duplicate directory "/mingw/lib/gcc/mingw32/4.7.2/../../../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
ignoring duplicate directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/include-fixed"
ignoring nonexistent directory
"c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.2/../../../../mingw32/include"
ignoring duplicate directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/mingw32
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/backward
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/../../../../include
 c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include-fixed
End of search list.
GNU C++ (GCC) version 4.7.2 (mingw32)
        compiled by GNU C version 4.7.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: fdc0bc7c97f61ac24bf8edb5646b3bc3
constexpr_tuple_cat.cpp:3:92:   in constexpr expansion of
'std::tuple_cat(_Tpls&& ...) [with _Tpls = {std::tuple<A, A>, std::tuple<A>};
<template-parameter-1-2> = void; typename std::__tuple_cat_result<_Tpls
...>::__type = std::tuple<A, A, A>]((* & std::make_tuple(_Elements&& ...) [with
_Elements = {A}; typename std::__decay_and_strip<_Elements>::__type = <type
error>]()))'
constexpr_tuple_cat.cpp:3:92:   in constexpr expansion of
'std::__tuple_concater<_Ret, std::_Index_tuple<_Is ...>, _Tp, _Tpls
...>::_S_do(_Tp&&, _Tpls&& ..., _Us&& ...) [with _Us = {}; _Ret = std::tuple<A,
A, A>; unsigned int ..._Is = {0u, 1u}; _Tp = std::tuple<A, A>; _Tpls =
{std::tuple<A>}]((* & std::forward<std::tuple<A> >((* & __tpls#1))))'
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/tuple:1009:52:   in constexpr
expansion of 'std::get<0u, {A, A}>((* & std::forward<std::tuple<A, A> >((* &
__tp))))'
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/tuple:759:45:   in constexpr
expansion of 'std::get<0u, {A, A}>((* & __t))'
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/tuple:744:35:   in constexpr
expansion of 'std::__get_helper<0u, A, {A}>((*(std::_Tuple_impl<0u, A, A>*)(&
__t)))'
c:\mingw\bin\../lib/gcc/mingw32/4.7.2/include/c++/tuple:729:60:   in constexpr
expansion of 'std::_Tuple_impl<_Idx, _Head, _Tail ...>::_M_head<0u, A, {A}>((*
& __t))'
constexpr_tuple_cat.cpp:3:92: error: '(std::_Head_base<0u, A, true>*)(&
std::tuple<A, A>())' is not a constant expression


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]