The following code compiles fine with gcc and clang but gives an error with icc 2016.
#include <utility>
struct A {
using value_type = double;
};
struct K {
template<class T, class V = typename T::value_type>
auto require(T&& x) -> std::true_type;
};
template<
class X , class Y,
typename R = decltype(std::declval<X>().template require<Y>(
std::declval<Y>()))>
constexpr bool g() {
return R::value;
}
int main() {
g<K, A>();
return 0;
}