$search
00001 00009 /***************************************************************************** 00010 ** Includes 00011 *****************************************************************************/ 00012 00013 #include <gtest/gtest.h> 00014 #include "../../include/ecl/mpl/enable_if.hpp" 00015 #include "../../include/ecl/mpl/bool.hpp" 00016 00020 /***************************************************************************** 00021 ** Using 00022 *****************************************************************************/ 00023 00024 using ecl::enable_if; 00025 00026 /***************************************************************************** 00027 ** Classes 00028 *****************************************************************************/ 00029 00030 namespace ecl { 00031 namespace mpl { 00032 namespace tests { 00033 00034 /***************************************************************************** 00035 ** Is Float 00036 *****************************************************************************/ 00037 00038 template <typename T> 00039 class is_float : public ecl::False {}; 00040 00041 template <> 00042 class is_float<float> : public ecl::True {}; 00043 00044 template <> 00045 class is_float<double> : public ecl::True {}; 00046 00050 template <typename T, typename Enable = void> 00051 class TestDude { 00052 public: 00053 bool isSpecialisation() { return false; } 00054 }; 00058 template <typename T> 00059 class TestDude< T, typename enable_if< is_float<T> >::type > { 00060 public: 00061 bool isSpecialisation() { return true; } 00062 }; 00063 00064 } // namespace tests 00065 } // namespace mpl 00066 } // namespace ecl 00067 00068 /***************************************************************************** 00069 ** Using 00070 *****************************************************************************/ 00071 00072 using namespace ecl::mpl::tests; 00073 00074 /***************************************************************************** 00075 ** Tests 00076 *****************************************************************************/ 00077 00078 TEST(EnableIfTests,oneshot) { 00079 TestDude<float> float_dude; 00080 TestDude<int> int_dude; 00081 bool result; 00082 result = float_dude.isSpecialisation(); 00083 EXPECT_EQ(true, result); 00084 result = int_dude.isSpecialisation(); 00085 EXPECT_EQ(false, result); 00086 } 00087 00088 /***************************************************************************** 00089 ** Main program 00090 *****************************************************************************/ 00091 00092 int main(int argc, char **argv) { 00093 00094 testing::InitGoogleTest(&argc,argv); 00095 return RUN_ALL_TESTS(); 00096 }