#include <iostream>
#include <utility>
template<class...>struct voider{using type=void;};
template<class...Ts>using void_t=typename voider<Ts...>::type;
template<class T>
void f(std::conditional_t< std::is_same<T,double>::value, T, void >)
{
std::cout << "hello world!\n";
}
int main() {
f<int>();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlPGNsYXNzLi4uPnN0cnVjdCB2b2lkZXJ7dXNpbmcgdHlwZT12b2lkO307CnRlbXBsYXRlPGNsYXNzLi4uVHM+dXNpbmcgdm9pZF90PXR5cGVuYW1lIHZvaWRlcjxUcy4uLj46OnR5cGU7Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIGYoc3RkOjpjb25kaXRpb25hbF90PCBzdGQ6OmlzX3NhbWU8VCxkb3VibGU+Ojp2YWx1ZSwgVCwgdm9pZCA+KQp7CiAgICBzdGQ6OmNvdXQgPDwgImhlbGxvIHdvcmxkIVxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBmPGludD4oKTsKfQ==
prog.cpp: In function 'int main()':
prog.cpp:14:12: error: no matching function for call to 'f()'
f<int>();
^
prog.cpp:14:12: note: candidate is:
prog.cpp:8:6: note: template<class T> void f(std::conditional_t<std::is_same<T, double>::value, T, void>)
void f(std::conditional_t< std::is_same<T,double>::value, T, void >)
^
prog.cpp:8:6: note: template argument deduction/substitution failed:
prog.cpp: In substitution of 'template<class T> void f(std::conditional_t<std::is_same<T, double>::value, T, void>) [with T = int]':
prog.cpp:14:12: required from here
prog.cpp:8:6: error: invalid parameter type 'std::conditional_t<false, int, void> {aka void}'