mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-15 13:26:40 +02:00
latest oatch from Nathan Ridge
[SVN r79305]
This commit is contained in:
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user