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



             Bug #: 56774

           Summary: G++ 4.8 reverses variadic template types during

                    unpacking

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: major

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: w.shane.gr...@gmail.com





In g++ 4.8, it seems as if variadic templates are reversed when being unpacked.

 Consider the following minimal example:



#include <tuple>

#include <iostream>



template <class T, class ... OtherT>

void something( std::tuple<T, OtherT...> & tup )

{

  std::cout << std::get<1>(tup) << std::endl;

}



int main()

{

  std::tuple<int, char, bool> myTuple(3, 'a', true);



  // Compiles OK in GCC 4.6.3 but NOT 4.8

  something<int, char, bool>( myTuple );



  // Compiles OK in GCC 4.8 but NOT 4.6.3

  something<int, bool, char>( myTuple );



  return 0;

}



The output of this, if the appropriate line is commented out, will be: 'a'.  To

get code that previously worked under 4.6.3, the template parameters that will

be unpacked have to be reversed.



See relevant Stack Overflow post here:

http://stackoverflow.com/questions/15692112/gcc-4-8-is-reversing-variadic-template-parameter-pack

Reply via email to