Поскольку это зависит от успеха SFINAE, вы должны использовать static_assert
(или BOOST_STATIC_ASSERT
), чтобы убедиться, что SFINAE успешно пройден.
Я не знаю, будет ли работать ваш код все компиляторы, но статическое утверждение не выполнит компиляцию, если конкретному компилятору не удается получить ожидаемый вывод для конкретного SFINAE.