[Bug c++/65091] New: decltype(~arg) fails for template functions
ptomulik at meil dot pw.edu.pl
gcc-bugzilla@gcc.gnu.org
Tue Feb 17 15:29:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65091
Bug ID: 65091
Summary: decltype(~arg) fails for template functions
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ptomulik at meil dot pw.edu.pl
Created attachment 34790
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34790&action=edit
ii file generated by -save-temps
The following program does not compile with g++ (although it compiles with
clang++):
template<typename T>
auto foo(T x) -> decltype(~x)
{ return ~x; }
int bar()
{ return foo(10); }
ptomulik@tea:$ g++ -std=c++11 -g -O0 -Wall -Wextra -Werror -pedantic -c -o
test.o test.cpp
test.cpp: In function ‘int bar()’:
test.cpp:6:16: error: no matching function for call to ‘foo(int)’
{ return foo(10); }
^
test.cpp:6:16: note: candidate is:
test.cpp:2:6: note: template<class T> decltype (~ x) foo(T)
auto foo(T x) -> decltype(~x)
^
test.cpp:2:6: note: template argument deduction/substitution failed:
test.cpp: In substitution of ‘template<class T> decltype (~ x) foo(T) [with T =
int]’:
test.cpp:6:16: required from here
test.cpp:2:6: error: ‘x’ was not declared in this scope
test.cpp:6:19: error: control reaches end of non-void function
[-Werror=return-type]
{ return foo(10); }
^
cc1plus: all warnings being treated as errors
This is specific to the unary operator "~" and expression involving argument
name (not its type). All the following variants compile well for instance:
template<typename T>
auto foo(T x) -> decltype(!x)
{ return !x; }
template<typename T>
auto foo(T x) -> decltype(-x)
{ return -x; }
template<typename T>
auto foo(T x) -> decltype(+x)
{ return +x; }
template<typename T>
auto foo(T x) -> decltype(~T())
{ return ~x; }
My gcc is:
ptomulik@tea:$ g++ --version
g++-4.9.real (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
My OS is Debian 8.0.
More information about the Gcc-bugs
mailing list