Index: libs/fusion/test/sequence/define_struct_inline.cpp =================================================================== --- libs/fusion/test/sequence/define_struct_inline.cpp (revision 81055) +++ libs/fusion/test/sequence/define_struct_inline.cpp (working copy) @@ -26,6 +26,16 @@ ) }; +template +struct tpl_cls +{ + BOOST_FUSION_DEFINE_STRUCT_INLINE( + point, + (int, x) + (int, y) + ) +}; + namespace ns { BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m)) @@ -33,8 +43,8 @@ BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct, ) } -int -main() +template +void run_test() { using namespace boost::fusion; @@ -48,8 +58,8 @@ } { - BOOST_MPL_ASSERT_NOT((traits::is_view)); - cls::point p(123, 456); + BOOST_MPL_ASSERT_NOT((traits::is_view)); + Point p(123, 456); std::cout << at_c<0>(p) << std::endl; std::cout << at_c<1>(p) << std::endl; @@ -60,8 +70,8 @@ at_c<1>(p) = 9; BOOST_TEST(p == make_vector(6, 9)); - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); + BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); + BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); BOOST_TEST(front(p) == 6); BOOST_TEST(back(p) == 9); @@ -69,7 +79,7 @@ { vector v1(4, 2); - cls::point v2(5, 3); + Point v2(5, 3); vector v3(5, 4); BOOST_TEST(v1 < v2); BOOST_TEST(v1 <= v2); @@ -82,15 +92,15 @@ } { - // conversion from cls::point to vector - cls::point p(5, 3); + // conversion from Point to vector + Point p(5, 3); vector v(p); v = p; } { - // conversion from cls::point to list - cls::point p(5, 3); + // conversion from Point to list + Point p(5, 3); list l(p); l = p; } @@ -105,13 +115,20 @@ } { - cls::point p = make_list(5,3); + Point p = make_list(5,3); BOOST_TEST(p == make_vector(5,3)); p = make_list(3,5); BOOST_TEST(p == make_vector(3,5)); } +} +int +main() +{ + run_test(); // test with non-template enclosing class + run_test::point>(); // test with template enclosing class return boost::report_errors(); + } Index: libs/fusion/test/sequence/define_tpl_struct_inline.cpp =================================================================== --- libs/fusion/test/sequence/define_tpl_struct_inline.cpp (revision 81055) +++ libs/fusion/test/sequence/define_tpl_struct_inline.cpp (working copy) @@ -27,6 +27,17 @@ ) }; +template +struct tpl_cls +{ + BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE( + (X)(Y), + point, + (X, x) + (Y, y) + ) +}; + namespace ns { BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), s, (M, m)) @@ -34,13 +45,11 @@ BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), empty_struct, ) } -int -main() +template +void run_test() { using namespace boost::fusion; - typedef cls::point point; - std::cout << tuple_open('['); std::cout << tuple_close(']'); std::cout << tuple_delimiter(", "); @@ -51,8 +60,8 @@ } { - BOOST_MPL_ASSERT_NOT((traits::is_view)); - point p(123, 456); + BOOST_MPL_ASSERT_NOT((traits::is_view)); + Point p(123, 456); std::cout << at_c<0>(p) << std::endl; std::cout << at_c<1>(p) << std::endl; @@ -63,8 +72,8 @@ at_c<1>(p) = 9; BOOST_TEST(p == make_vector(6, 9)); - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); + BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); + BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); BOOST_TEST(front(p) == 6); BOOST_TEST(back(p) == 9); @@ -72,7 +81,7 @@ { vector v1(4, 2); - point v2(5, 3); + Point v2(5, 3); vector v3(5, 4); BOOST_TEST(v1 < v2); BOOST_TEST(v1 <= v2); @@ -85,15 +94,15 @@ } { - // conversion from point to vector - point p(5, 3); + // conversion from Point to vector + Point p(5, 3); vector v(p); v = p; } { - // conversion from point to list - point p(5, 3); + // conversion from Point to list + Point p(5, 3); list l(p); l = p; } @@ -109,13 +118,20 @@ { - point p = make_list(5,3); + Point p = make_list(5,3); BOOST_TEST(p == make_vector(5,3)); p = make_list(3,5); BOOST_TEST(p == make_vector(3,5)); } +} +int +main() +{ + run_test >(); // test non-template enclosing class + run_test::point >(); // test template enclosing class + return boost::report_errors(); }