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