https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66717
Bug ID: 66717
Summary: In variable declaration, decltype incorrectly deduces
return type of function returning const reference to
int
Product: gcc
Version: 5.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: charlie at charliedyson dot net
Target Milestone: ---
Applying decltype to a function returning const int & appears to deduce int
rather than const int &. This only seems to happen when declaring a variable.
Here's an example showing this using error messages:
#include <iostream>
#include <string>
const int &const_ref_to_int ()
{
static int i;
return i;
}
const std::string &const_ref_to_string ()
{
static std::string s;
return s;
}
int main ()
{
// error: invalid conversion from 'const char*' to 'int' [-fpermissive]
decltype (const_ref_to_int ()) x = "foo";
// error: invalid initialization of reference of type 'const string&
// {aka const std::__cxx11::basic_string<char>&}' from expression
// of type 'double'
decltype (const_ref_to_string ()) y = 1.23;
// But this is fine:
static_assert (
std::is_same<decltype (const_ref_to_int ()), const int&>(), "");
}
Above example on Godbolt: https://goo.gl/sWgdc9