SFINAE-specialise apply() methods to avoid return type misid as char[]
The Analysis::apply
method should be callable without a template argument, returning a Projection
, but they don't: apply(evt, "Proj")
tries to return a char[5]
because a templated version mis-identifies the string argument as being a projection, and that it should be treated as the return type. To fix this we need to use SFINAE tricks to block anything other than a derived class of Projection
from being used as the templated type.