public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/55993] New: tuple_cat not a constant expression for result size >= 3
@ 2013-01-15 16:53 jnapoli at alum dot mit.edu
  2013-01-15 17:26 ` [Bug libstdc++/55993] " redi at gcc dot gnu.org
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: jnapoli at alum dot mit.edu @ 2013-01-15 16:53 UTC (permalink / raw)
  To: gcc-bugs


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


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2015-02-26 16:25 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-15 16:53 [Bug libstdc++/55993] New: tuple_cat not a constant expression for result size >= 3 jnapoli at alum dot mit.edu
2013-01-15 17:26 ` [Bug libstdc++/55993] " redi at gcc dot gnu.org
2013-01-15 17:29 ` redi at gcc dot gnu.org
2013-01-15 18:44 ` jnapoli at alum dot mit.edu
2013-01-15 19:15 ` [Bug c++/55993] [C++11] derived-to-base conversion fails in constant expression redi at gcc dot gnu.org
2013-01-15 19:24 ` redi at gcc dot gnu.org
2013-01-15 19:27 ` jnapoli at alum dot mit.edu
2013-01-15 19:34 ` glisse at gcc dot gnu.org
2013-01-15 19:39 ` glisse at gcc dot gnu.org
2013-02-13 17:57 ` jason at gcc dot gnu.org
2013-02-15 19:28 ` jason at gcc dot gnu.org
2015-02-26 15:49 ` splinterofchaos at gmail dot com
2015-02-26 17:12 ` jason at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).