1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <complex> 11 12// template<class T> complex<T> proj(const complex<T>&); 13// complex<long double> proj(long double); 14// complex<double> proj(double); 15// template<Integral T> complex<double> proj(T); 16// complex<float> proj(float); 17 18#include <complex> 19#include <type_traits> 20#include <cassert> 21 22#include "../cases.h" 23 24template <class T> 25void 26test(T x, typename std::enable_if<std::is_integral<T>::value>::type* = 0) 27{ 28 static_assert((std::is_same<decltype(std::proj(x)), std::complex<double> >::value), ""); 29 assert(std::proj(x) == proj(std::complex<double>(x, 0))); 30} 31 32template <class T> 33void 34test(T x, typename std::enable_if<std::is_floating_point<T>::value>::type* = 0) 35{ 36 static_assert((std::is_same<decltype(std::proj(x)), std::complex<T> >::value), ""); 37 assert(std::proj(x) == proj(std::complex<T>(x, 0))); 38} 39 40template <class T> 41void 42test(T x, typename std::enable_if<!std::is_integral<T>::value && 43 !std::is_floating_point<T>::value>::type* = 0) 44{ 45 static_assert((std::is_same<decltype(std::proj(x)), std::complex<T> >::value), ""); 46 assert(std::proj(x) == proj(std::complex<T>(x, 0))); 47} 48 49template <class T> 50void 51test() 52{ 53 test<T>(0); 54 test<T>(1); 55 test<T>(10); 56} 57 58int main() 59{ 60 test<float>(); 61 test<double>(); 62 test<long double>(); 63 test<int>(); 64 test<unsigned>(); 65 test<long long>(); 66} 67