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