Отказ от ответственности: это плохой ответ, безусловно, есть гораздо лучшие решения. Просто пример:)
Он обязательно должен быть реализован, но реализовать его тривиально;
template <class T1, class T2> struct CheckSameType; //no definition
template <class T> struct CheckSameType<T,T>{}; //
template <class T1, class T2>
AssertHasType(T2)
{
CheckSameType<T1, T2> tmp; //will result in error if T1 is not T2
}
Для использования следующим образом:
AssertHasType<bool>(retval);
Альтернатива (предложено GMan):
template <class T1, class T2> struct SameType
{
enum{value = false};
}
template <class T> struct SameType<T,T>
{
enum{value = true};
};
Используется как
static_assert(SameType<decltype(retval), bool>::value);