mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-14 12:56:38 +02:00
Define traits::is_view for non fusion types
This commit is contained in:
@ -14,6 +14,7 @@
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
// Special tags:
|
||||
struct non_fusion_tag;
|
||||
struct sequence_facade_tag;
|
||||
struct boost_tuple_tag; // boost::tuples::tuple tag
|
||||
struct boost_array_tag; // boost::array tag
|
||||
@ -32,6 +33,13 @@ namespace boost { namespace fusion
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct is_view_impl<non_fusion_tag>
|
||||
{
|
||||
template <typename T>
|
||||
struct apply : mpl::false_ {};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct is_view_impl<sequence_facade_tag>
|
||||
{
|
||||
|
@ -257,6 +257,7 @@ project
|
||||
[ run sequence/swap.cpp ]
|
||||
|
||||
[ compile support/is_sequence.cpp ]
|
||||
[ compile support/is_view.cpp ]
|
||||
[ compile support/pair_deque.cpp ]
|
||||
[ compile support/pair_list.cpp ]
|
||||
[ compile support/pair_map.cpp ]
|
||||
|
@ -165,6 +165,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||
ns::point p(123, 456, 789);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
@ -237,6 +238,7 @@ main()
|
||||
#if !BOOST_WORKAROUND(__GNUC__,<4)
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point_with_private_members>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point_with_private_members>::value);
|
||||
ns::point_with_private_members p(123, 456, 789);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
|
||||
empty_adt e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -93,6 +93,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||
ns::point basep(123, 456, 789);
|
||||
adapted::point p(basep);
|
||||
|
||||
|
@ -43,6 +43,7 @@ main()
|
||||
empty_adt empty;
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
|
||||
adapted::empty_adt e(empty);
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -84,6 +84,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||
ns::point p(123, 456, 789);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
|
||||
empty_adt e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -80,6 +80,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||
ns::point basep(123, 456);
|
||||
adapted::point p(basep);
|
||||
|
||||
|
@ -43,6 +43,7 @@ main()
|
||||
empty_adt empty;
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
|
||||
adapted::empty_adt e(empty);
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -86,6 +86,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||
ns::point p = {123, 456, 789};
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||
empty_struct e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -66,6 +66,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||
ns::point basep = {123, 456};
|
||||
adapted::point p(basep);
|
||||
|
||||
|
@ -43,6 +43,7 @@ main()
|
||||
empty_struct empty;
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
|
||||
adapted::empty_struct e(empty);
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -98,6 +98,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p(123, 456, 789);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -96,6 +96,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p = {123, 456, 789.43f};
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -170,6 +170,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p = {123, 456, 789};
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||
empty_struct e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -87,6 +87,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||
ns::point basep = {123, 456, 789};
|
||||
adapted::point p(basep);
|
||||
|
||||
|
@ -43,6 +43,7 @@ main()
|
||||
empty_struct empty;
|
||||
{
|
||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
||||
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
|
||||
adapted::empty_struct e(empty);
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -107,6 +107,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p(123, 456, 789);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -96,6 +96,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p = {123, 456, 789};
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -22,6 +22,8 @@ int main()
|
||||
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||
|
||||
array_type arr = {1,2,3};
|
||||
|
||||
|
@ -26,6 +26,8 @@ int main()
|
||||
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||
|
||||
array_type arr = {{1,2,3}};
|
||||
|
||||
|
@ -46,6 +46,7 @@ main()
|
||||
{
|
||||
typedef boost::tuple<int, std::string> tuple_type;
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<tuple_type>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<tuple_type>::value);
|
||||
tuple_type t(123, "Hola!!!");
|
||||
|
||||
std::cout << at_c<0>(t) << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||
ns::point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -30,6 +30,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||
empty_struct e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -46,6 +46,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -30,6 +30,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct<void> >));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct<void> >::value);
|
||||
empty_struct<void> e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -54,6 +54,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||
ns::point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -30,6 +30,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||
empty_struct e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -66,6 +66,7 @@ void run_test()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
|
||||
Point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -30,6 +30,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||
empty_struct e;
|
||||
|
||||
std::cout << e << std::endl;
|
||||
|
@ -42,6 +42,7 @@ main()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||
point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -61,6 +61,7 @@ void run_test()
|
||||
|
||||
{
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
|
||||
Point p(123, 456);
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
@ -89,6 +89,9 @@ main()
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<t1>));
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<t2>));
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<t3>));
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<t1>::value);
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<t2>::value);
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<t3>::value);
|
||||
}
|
||||
|
||||
{ // testing mpl::is_sequence
|
||||
|
@ -33,6 +33,8 @@ int main()
|
||||
|
||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||
|
||||
array_type arr = {{1,2,3}};
|
||||
|
||||
|
@ -44,6 +44,7 @@ main()
|
||||
{
|
||||
typedef std::pair<int, std::string> pair_type;
|
||||
BOOST_MPL_ASSERT_NOT((traits::is_view<pair_type>));
|
||||
BOOST_STATIC_ASSERT(!traits::is_view<pair_type>::value);
|
||||
pair_type p(123, "Hola!!!");
|
||||
|
||||
std::cout << at_c<0>(p) << std::endl;
|
||||
|
15
test/support/is_view.cpp
Normal file
15
test/support/is_view.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Nikita Kniazev
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#include <boost/fusion/support/is_view.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
|
||||
// Make sure fusion::is_view can be used with non fusion types.
|
||||
struct incomplete;
|
||||
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_view<incomplete>::value);
|
||||
|
||||
int main() { }
|
Reference in New Issue
Block a user