latest oatch from Nathan Ridge

[SVN r79305]
This commit is contained in:
Joel de Guzman
2012-07-05 23:39:50 +00:00
parent 85583b5ea9
commit a3b0cad1e7
4 changed files with 67 additions and 0 deletions

View File

@ -71,6 +71,24 @@ namespace ns
int y; int y;
}; };
#endif #endif
// A sequence that has data members defined in an unrelated namespace
// (std, in this case). This allows testing ADL issues.
class name
{
public:
name() {}
name(const std::string& last, const std::string& first)
: last(last), first(first) {}
const std::string& get_last() const { return last; }
const std::string& get_first() const { return first; }
void set_last(const std::string& last_) { last = last_; }
void set_first(const std::string& first_) { first = first_; }
private:
std::string last;
std::string first;
};
} }
BOOST_FUSION_ADAPT_ADT( BOOST_FUSION_ADAPT_ADT(
@ -87,6 +105,12 @@ BOOST_FUSION_ADAPT_ADT(
) )
#endif #endif
BOOST_FUSION_ADAPT_ADT(
ns::name,
(const std::string&, const std::string&, obj.get_last(), obj.set_last(val))
(const std::string&, const std::string&, obj.get_first(), obj.set_first(val))
)
int int
main() main()
{ {
@ -130,6 +154,20 @@ main()
BOOST_TEST(v3 > v2); BOOST_TEST(v3 > v2);
BOOST_TEST(v3 >= v2); BOOST_TEST(v3 >= v2);
} }
{
fusion::vector<std::string, std::string> v1("Lincoln", "Abraham");
ns::name v2("Roosevelt", "Franklin");
ns::name v3("Roosevelt", "Theodore");
BOOST_TEST(v1 < v2);
BOOST_TEST(v1 <= v2);
BOOST_TEST(v2 > v1);
BOOST_TEST(v2 >= v1);
BOOST_TEST(v2 < v3);
BOOST_TEST(v2 <= v3);
BOOST_TEST(v3 > v2);
BOOST_TEST(v3 >= v2);
}
{ {
// conversion from ns::point to vector // conversion from ns::point to vector

View File

@ -67,6 +67,7 @@ main()
using namespace boost::fusion; using namespace boost::fusion;
typedef ns::point<int, int> point; typedef ns::point<int, int> point;
typedef ns::point<std::string, std::string> name;
std::cout << tuple_open('['); std::cout << tuple_open('[');
std::cout << tuple_close(']'); std::cout << tuple_close(']');
@ -106,6 +107,20 @@ main()
BOOST_TEST(v3 >= v2); BOOST_TEST(v3 >= v2);
} }
{
boost::fusion::vector<std::string, std::string> v1("Lincoln", "Abraham");
name v2("Roosevelt", "Franklin");
name v3("Roosevelt", "Theodore");
BOOST_TEST(v1 < v2);
BOOST_TEST(v1 <= v2);
BOOST_TEST(v2 > v1);
BOOST_TEST(v2 >= v1);
BOOST_TEST(v2 < v3);
BOOST_TEST(v2 <= v3);
BOOST_TEST(v3 > v2);
BOOST_TEST(v3 >= v2);
}
{ {
// conversion from point to vector // conversion from point to vector
point p(5, 3); point p(5, 3);

View File

@ -29,6 +29,8 @@ struct cls
namespace ns namespace ns
{ {
BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m)) BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m))
BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct, )
} }
int int
@ -40,6 +42,11 @@ main()
std::cout << tuple_close(']'); std::cout << tuple_close(']');
std::cout << tuple_delimiter(", "); std::cout << tuple_delimiter(", ");
{
BOOST_STATIC_ASSERT(boost::fusion::result_of::size<ns::empty_struct>::value == 0);
BOOST_STATIC_ASSERT(boost::fusion::result_of::empty<ns::empty_struct>::value);
}
{ {
BOOST_MPL_ASSERT_NOT((traits::is_view<cls::point>)); BOOST_MPL_ASSERT_NOT((traits::is_view<cls::point>));
cls::point p(123, 456); cls::point p(123, 456);

View File

@ -30,6 +30,8 @@ struct cls
namespace ns namespace ns
{ {
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), s, (M, m)) BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), s, (M, m))
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), empty_struct, )
} }
int int
@ -43,6 +45,11 @@ main()
std::cout << tuple_close(']'); std::cout << tuple_close(']');
std::cout << tuple_delimiter(", "); std::cout << tuple_delimiter(", ");
{
BOOST_STATIC_ASSERT(boost::fusion::result_of::size<ns::empty_struct<int> >::value == 0);
BOOST_STATIC_ASSERT(boost::fusion::result_of::empty<ns::empty_struct<int> >::value);
}
{ {
BOOST_MPL_ASSERT_NOT((traits::is_view<point>)); BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
point p(123, 456); point p(123, 456);