Reputation: 1152
I want to build a class with configurable type and difference type template parameters. The first solution compiles fine at VS2012Nov and g++4.7.2:
template <typename T,
typename DT = decltype(T()-T())>
class A { };
But when I hides decltype(T()-T())
to additional template, VS still compiles it, but g++ not.
template < typename T >
struct Delta {
typedef decltype( T() - T() ) Value;
};
template <typename T,
typename DT = Delta<T>::Value >
class A { };
Why g++ doesn't support such syntax?
Upvotes: 0
Views: 171
Reputation: 171177
You're missing the typename
keyword, to tell the compiler that the dependent name is a type:
template < typename T >
struct Delta {
typedef decltype( T() - T() ) Value;
};
template <typename T,
typename DT = typename Delta<T>::Value >
class A { };
For more info, see Where and why do I have to put the “template” and “typename” keywords?.
Upvotes: 1