This is the mail archive of the
mailing list for the GCC project.
Re: Patch for constexpr variable templates
- From: Adam Butcher <adam at jessamine dot co dot uk>
- To: Jason Merrill <jason at redhat dot com>
- Cc: Braden Obrzut <admin at maniacsvault dot net>, Ed Smith-Rowland <3dw4rd at verizon dot net>, gcc-patches <gcc-patches at gcc dot gnu dot org>, Andrew Sutton <andrew dot n dot sutton at gmail dot com>
- Date: Sun, 27 Jul 2014 16:24:02 +0100
- Subject: Re: Patch for constexpr variable templates
- Authentication-results: sourceware.org; auth=none
- References: <53CCFBEF dot 9080804 at verizon dot net> <53CDD522 dot 9040508 at maniacsvault dot net> <53D172E4 dot 9020902 at redhat dot com> <53D242FD dot 70002 at maniacsvault dot net> <53D2CB20 dot 1090201 at redhat dot com> <53D352F7 dot 7040402 at maniacsvault dot net> <53D3D34A dot 9080009 at redhat dot com> <53D3D3D9 dot 9000102 at redhat dot com>
On 2014-07-26 17:14, Jason Merrill wrote:
On 07/26/2014 12:11 PM, Jason Merrill wrote:
On 07/26/2014 03:04 AM, Braden Obrzut wrote:
On 07/25/2014 05:24 PM, Jason Merrill wrote:
Fair enough, but in that case let's use 'sorry' rather then
be clear that it's a missing feature.
Tests like g++.dg/cpp1y/pr59638.C produce extra failures if this is
changed. Is there something I'm supposed to do to account for
Changing dg-error to dg-message should cover it.
Actually, we shouldn't be treating that testcase as declaring
variable templates at all. Adam, any thoughts?
In the 59638 case, the declarations
void (*b)(auto) = 0;
are shorthand for
template <typename T> void (*a)(T);
template <typename T> void (*b)(T) = 0;
which, unless there's some constraint with variable templates that I'm
not aware of, ought to define two variable templates 'a' and 'b' to be
ptr-to-function-taking-T. So I think it's correct that the variable
template stuff should be triggering here.
Prefixing the two decls with constexpr does allow them to compile
(albeit with an "uninitialized const 'a'" permerror in the first case).
The issue with 59638 was that the errors were not correctly unwinding
the template scope so declarations further down the file were considered
templates when the weren't.
There may be similar recovery issues with not supporting non-constexpr
variable templates defined with 'auto' (if that's permitted at all).