Visual C++ does not support "this" on "decltype", so we need a macro depending on compiler.
GCC features support detection is added.
Instead of typeid into decltype, use preprocessor control of using RTTI.
Play with Travis settings