1781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier//===----------------------------------------------------------------------===// 2781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// 3781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// The LLVM Compiler Infrastructure 4781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// 5781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 6781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// Source Licenses. See LICENSE.TXT for details. 7781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// 8781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier//===----------------------------------------------------------------------===// 9781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 10781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// <complex> 11781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 12781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// Test that UDT's convertible to an integral or floating point type do not 13781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier// participate in overload resolution. 14781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 15781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier#include <complex> 16781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier#include <type_traits> 17781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier#include <cassert> 18781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 19781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiseliertemplate <class IntT> 20781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselierstruct UDT { 21781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier operator IntT() const { return 1; } 22781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier}; 23781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 24781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric FiselierUDT<float> ft; 25781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric FiselierUDT<double> dt; 26781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric FiselierUDT<long double> ldt; 27781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric FiselierUDT<int> it; 28781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric FiselierUDT<unsigned long> uit; 29781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier 30781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselierint main() 31781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier{ 32781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 33781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::real(ft); // expected-error {{no matching function}} 34781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::real(dt); // expected-error {{no matching function}} 35781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::real(ldt); // expected-error {{no matching function}} 36781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::real(it); // expected-error {{no matching function}} 37781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::real(uit); // expected-error {{no matching function}} 38781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 39781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 40781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::imag(ft); // expected-error {{no matching function}} 41781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::imag(dt); // expected-error {{no matching function}} 42781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::imag(ldt); // expected-error {{no matching function}} 43781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::imag(it); // expected-error {{no matching function}} 44781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::imag(uit); // expected-error {{no matching function}} 45781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 46781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 47781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::arg(ft); // expected-error {{no matching function}} 48781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::arg(dt); // expected-error {{no matching function}} 49781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::arg(ldt); // expected-error {{no matching function}} 50781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::arg(it); // expected-error {{no matching function}} 51781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::arg(uit); // expected-error {{no matching function}} 52781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 53781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 54781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::norm(ft); // expected-error {{no matching function}} 55781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::norm(dt); // expected-error {{no matching function}} 56781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::norm(ldt); // expected-error {{no matching function}} 57781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::norm(it); // expected-error {{no matching function}} 58781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::norm(uit); // expected-error {{no matching function}} 59781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 60781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 61781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::conj(ft); // expected-error {{no matching function}} 62781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::conj(dt); // expected-error {{no matching function}} 63781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::conj(ldt); // expected-error {{no matching function}} 64781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::conj(it); // expected-error {{no matching function}} 65781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::conj(uit); // expected-error {{no matching function}} 66781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 67781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier { 68781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::proj(ft); // expected-error {{no matching function}} 69781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::proj(dt); // expected-error {{no matching function}} 70781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::proj(ldt); // expected-error {{no matching function}} 71781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::proj(it); // expected-error {{no matching function}} 72781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier std::proj(uit); // expected-error {{no matching function}} 73781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier } 74781fb2a7380ccc6a0ff4c535c31234b875f20db8Eric Fiselier} 75