Как статически проверить что у наследника есть нужная функция?
Пример:
template <typename Heir>
class SToString {
public:
	SToString () {
		// СТАТИЧЕСКАЯ ПРОВЕРКА
		std::string (Heir::* tmp)() = &Heir::toStringImpl;
	}
	std::string toString() {
		return static_cast<Heir*>(this)->toStringImpl();
	}
};
class Foo : public SToString<Foo> {
public:
	std::string toStringImpl() {
		return "Foo";
	}
};
Вот это вот работает, но только если в коде присутствует вызов конструктора Foo. И еще это костыль, который сыпет ворнинги.
Есть ли нормальное решение, например со static_assert-ом.
