69 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <complex>10 11// template<class T> complex<T> proj(const complex<T>&);12// complex<long double> proj(long double);13// complex<double> proj(double);14// template<Integral T> complex<double> proj(T);15// complex<float> proj(float);16 17#include <complex>18#include <type_traits>19#include <cassert>20 21#include "test_macros.h"22#include "../cases.h"23 24template <class T>25void26test(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>33void34test(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>41void42test(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>50void51test()52{53 test<T>(0);54 test<T>(1);55 test<T>(10);56}57 58int main(int, char**)59{60 test<float>();61 test<double>();62 test<long double>();63 test<int>();64 test<unsigned>();65 test<long long>();66 67 return 0;68}69