#include <iostream>
#include <string>
#include <type_traits>
/* ---- ambiguous -----
template <typename... Ts>
auto snifae() -> std::conditional_t<true, std::true_type, std::common_type_t<Ts...>>;
template <typename...>
auto snifae(...) -> std::false_type;
int main()
{
decltype(snifae<int, char, bool>()) t;
return 0;
}
*/
// ---- not ambiguous ------
template <typename... Ts>
auto snifae(void*) -> std::conditional_t<true, std::true_type, std::common_type_t<Ts...>>;
template <typename...>
auto snifae(...) -> std::false_type;
int main()
{
decltype(snifae<int, char,bool>(nullptr)) t;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgovKiAtLS0tIGFtYmlndW91cyAtLS0tLSAKCnRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KYXV0byBzbmlmYWUoKSAtPiBzdGQ6OmNvbmRpdGlvbmFsX3Q8dHJ1ZSwgc3RkOjp0cnVlX3R5cGUsIHN0ZDo6Y29tbW9uX3R5cGVfdDxUcy4uLj4+OwoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uPgphdXRvIHNuaWZhZSguLi4pIC0+IHN0ZDo6ZmFsc2VfdHlwZTsKCmludCBtYWluKCkgCnsKCWRlY2x0eXBlKHNuaWZhZTxpbnQsIGNoYXIsIGJvb2w+KCkpIHQ7CglyZXR1cm4gMDsKfQoKKi8KCi8vIC0tLS0gbm90IGFtYmlndW91cyAtLS0tLS0KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KYXV0byBzbmlmYWUodm9pZCopIC0+IHN0ZDo6Y29uZGl0aW9uYWxfdDx0cnVlLCBzdGQ6OnRydWVfdHlwZSwgc3RkOjpjb21tb25fdHlwZV90PFRzLi4uPj47Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CmF1dG8gc25pZmFlKC4uLikgLT4gc3RkOjpmYWxzZV90eXBlOwoKaW50IG1haW4oKQp7CglkZWNsdHlwZShzbmlmYWU8aW50LCBjaGFyLGJvb2w+KG51bGxwdHIpKSB0OwoJcmV0dXJuIDA7Cn0=