Ok, that's why Denis suggested, but I'm not seeing how that solution provides a palatable
solution, because the template only on return type sort of defeats the purpose of the
operator in the first place (the purpose being to provide a more natural, intuitive syntax).
1) return a boost::variant<>;
2) return a boost::any;
3) use your own type erasure class (http://www.cplusplus.com/forum/articles/18756/);
4) always return a string, and perform conversions where necessary.