Candidate template ignored because template argument could not be inferred

The argument K in const typename A<K>::X is not deducible. Basically, everything left of a :: is not deducible (if :: separates a nested-name).

It’s trivial to see why it makes no sense to ask for deduction by running through this thought experiment:

struct A { typedef int type; }
struct B { typedef int type; }

template <typename T> void foo(typename T::type);

foo(5);   // is T == A or T == B ??

There’s no one-to-one mapping from types to nested types: Given any type (such as int), there could be many ambient types of which it is a nested type, or there needn’t be any.

Leave a Comment