https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71425

            Bug ID: 71425
           Summary: GCC does not implement C++/WG21 DR 1399/1388
           Product: gcc
           Version: 6.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: schaub.johannes at googlemail dot com
  Target Milestone: ---

The following testcase should fail to compile because Args is not deduced
(stays empty), but surprisingly, GCC accept it

   #include <tuple>

   template<class... Args, class T>
   T method(std::tuple<Args...>, Args..., T, ...) {
      return T();
   }

   int main() {
       method(std::make_tuple<int, float, double>(1, 1.0f, 1.0),
           1, 1.0f, 1.0, 1);
   }

Here, "Args..." in the "tuple<Args...>" cannot be deduced because DR1388 says
that "Args" is never deduced, because it appears in a non-deduced context in
the second function parameter. GCC however seems to deduce it by the
tuple<...>, and then expands its value into the second function parameter. 

However, as Jason notes in DR1399, this is not sensible at all. T will have
been deduced by the first "1", rather than by the last "1". GCC will happily
accept the code if the last "1" is changed to "1.0", with T staying "int".

Reply via email to