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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |rejects-valid
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-04-13
      Known to work|                            |4.8.3
            Summary|miss interpret in a virtual |[4.9/5 Regression]
                   |member function with a      |misinterpret in a virtual
                   |C++11 style function        |member function with a
                   |signature                   |C++11 style function
                   |                            |signature
     Ever confirmed|0                           |1

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Rejects-valid, introduced by support for C++14 return type deduction.


Reduced:

template<typename T> struct F { };

class a
{
  virtual auto f( F< void () > ) -> void;
  virtual auto g( F< auto () -> void > ) -> void;
};

auto main() -> int { }



The error in comment 0 is only on the 4.9 branch, 5.0 gives a different error:

s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
   virtual auto g( F< auto () -> void > ) -> void;
                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
s.cc:6:38: error: template argument 1 is invalid
   virtual auto g( F< auto () -> void > ) -> void;
                                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
   virtual auto g( F< auto () -> void > ) -> void;
                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
s.cc:6:38: error: template argument 1 is invalid
   virtual auto g( F< auto () -> void > ) -> void;
                                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
   virtual auto g( F< auto () -> void > ) -> void;
                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
s.cc:6:38: error: template argument 1 is invalid
   virtual auto g( F< auto () -> void > ) -> void;
                                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
   virtual auto g( F< auto () -> void > ) -> void;
                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
s.cc:6:38: error: template argument 1 is invalid
   virtual auto g( F< auto () -> void > ) -> void;
                                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
   virtual auto g( F< auto () -> void > ) -> void;
                      ^
s.cc:6:22: error: use of ‘auto’ in parameter declaration only available with
-std=c++14 or -std=gnu++14
s.cc:6:38: error: template argument 1 is invalid
   virtual auto g( F< auto () -> void > ) -> void;
                                      ^
s.cc:6:19: error: ‘F’ is not a type
   virtual auto g( F< auto () -> void > ) -> void;
                   ^
s.cc:6:20: error: expected ‘,’ or ‘...’ before ‘<’ token
   virtual auto g( F< auto () -> void > ) -> void;
                    ^

Reply via email to