hello.
I have ran into yet another problem I do not understand.
The following does not instantiate (argument instantiation fails), why?
template<class E>
void operator[](typename boost::mpl::identity<E>::type e) const;
thank you for your help
hello.
I have ran into yet another problem I do not understand.
The following does not instantiate (argument instantiation fails), why?
template<class E>
void operator[](typename boost::mpl::identity<E>::type e) const;
thank you for your help
That seems awfully redundant. identity<E>::type
is guaranteed to be equivalent to E
, so why not just declare your template as:
template<class E>
void operator[](E e) const;
identity
can be used to force you to specify the template argument explicitly. It effectively prevents that function parameter from partaking in template argument deduction.
A qualified type name is one of the non deduced contexts; that is, identity<E>::type
will not be used to deduce the template parameter for E
.
For example, if you have:
template<class E>
void f(typename boost::mpl::identity<E>::type e) { }
f(42); // won't work
f<int>(42); // works