http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55931
Bug #: 55931
Summary: Constexpr member function inside a static member is
not working
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
The call of a constexpr member of a class into a static member of the same
class is not working. This is illustrated by the following code:
(tested on g++ 4.7.1 and 4.7.2, but it may also affect g++ 4.8)
-------------------------------------------------------------------
#include <iostream>
#include <type_traits>
template<typename Type>
class Test
{
public:
constexpr Test(const Type val) : _value(val) {}
constexpr Type get() const {return _value;}
static void test()
{
static constexpr Test<int> x(42);
std::integral_constant<int, x.get()> i; // This is not working
std::cout<<i<<std::endl;
}
protected:
Type _value;
};
int main(int argc, char *argv[])
{
static constexpr Test<int> x(42);
std::integral_constant<int, x.get()> i; // This is working
std::cout<<i<<std::endl;
Test<double>::test();
return 0;
}
-------------------------------------------------------------------
which produces the following error:
-------------------------------------------------------------------
main.cpp: In static member function ‘static void Test<Type>::test()’:
main.cpp:13:48: erreur: invalid use of ‘Test<Type>::get<int>’ to form a
pointer-to-member-function
main.cpp:13:48: note: a qualified-id is required
main.cpp:13:48: erreur: could not convert template argument
‘x.Test<Type>::get<int>()’ to ‘int’
main.cpp:13:51: erreur: invalid type in declaration before ‘;’ token
-------------------------------------------------------------------