forked from boostorg/typeof
Compare commits
49 Commits
svn-branch
...
boost-1.64
Author | SHA1 | Date | |
---|---|---|---|
1d3589e9c0 | |||
ed7d30939d | |||
6aea11f3df | |||
e56adea1b1 | |||
4fab1b5d17 | |||
85eed8ff60 | |||
81e54ccb1f | |||
e9749f185f | |||
bfb19140f1 | |||
4aab62e71c | |||
0f21fe555a | |||
ef283a6a74 | |||
33ae5341c1 | |||
cde21a588d | |||
3ecb3bf102 | |||
1c1ab4c883 | |||
8d8d35c1ae | |||
84ec781ea1 | |||
f7df17a93a | |||
ed21868c25 | |||
c66289f7ac | |||
43b4d4522c | |||
8868adc891 | |||
452b493b7a | |||
eeff4e592c | |||
1b65bfc95d | |||
eda5c4afba | |||
340148f738 | |||
64ba3be86f | |||
d337b0837a | |||
dddbb00da4 | |||
935b36d8f5 | |||
5bd010787a | |||
55ac93f947 | |||
366ab1b621 | |||
aede9c2866 | |||
2b92bbcb21 | |||
dff8a5c505 | |||
a460694e5d | |||
db9203fb0e | |||
9a14e20bc5 | |||
47a4b2a2c1 | |||
337fe1fdf6 | |||
11b18afcce | |||
7cbdf2406a | |||
97b9bda347 | |||
041f9cfd24 | |||
c17f725e5f | |||
35874c8e32 |
@ -15,7 +15,15 @@ boostbook standalone
|
||||
<xsl:param>navig.graphics=0
|
||||
;
|
||||
|
||||
install html : ../../../doc/html/boostbook.css ;
|
||||
install html : ../../../doc/src/boostbook.css ;
|
||||
install ../ : ../../../boost.png ;
|
||||
|
||||
|
||||
###############################################################################
|
||||
alias boostdoc
|
||||
: typeof
|
||||
:
|
||||
:
|
||||
: ;
|
||||
explicit boostdoc ;
|
||||
alias boostrelease ;
|
||||
explicit boostrelease ;
|
||||
|
0
include/boost/typeof/dmc/typeof_impl.hpp
Normal file → Executable file
0
include/boost/typeof/dmc/typeof_impl.hpp
Normal file → Executable file
0
include/boost/typeof/encode_decode.hpp
Normal file → Executable file
0
include/boost/typeof/encode_decode.hpp
Normal file → Executable file
0
include/boost/typeof/encode_decode_params.hpp
Normal file → Executable file
0
include/boost/typeof/encode_decode_params.hpp
Normal file → Executable file
0
include/boost/typeof/incr_registration_group.hpp
Normal file → Executable file
0
include/boost/typeof/incr_registration_group.hpp
Normal file → Executable file
0
include/boost/typeof/int_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/int_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/integral_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/integral_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/modifiers.hpp
Normal file → Executable file
0
include/boost/typeof/modifiers.hpp
Normal file → Executable file
@ -153,7 +153,60 @@ namespace boost
|
||||
};
|
||||
};
|
||||
# endif
|
||||
// EAN: preprocess this block out on advice of Peder Holt
|
||||
// to eliminate errors in type_traits/common_type.hpp
|
||||
# if 0 //BOOST_WORKAROUND(BOOST_MSVC,==1310)
|
||||
template<const std::type_info& ref_type_info>
|
||||
struct msvc_typeid_wrapper {
|
||||
typedef typename msvc_extract_type<msvc_typeid_wrapper>::id2type id2type;
|
||||
typedef typename id2type::type wrapped_type;
|
||||
typedef typename wrapped_type::type type;
|
||||
};
|
||||
//This class is used for registering the type T. encode_type<T> is mapped against typeid(encode_type<T>).
|
||||
//msvc_typeid_wrapper<typeid(encode_type<T>)> will now have a type typedef that equals encode_type<T>.
|
||||
template<typename T>
|
||||
struct encode_type
|
||||
{
|
||||
typedef encode_type<T> input_type;
|
||||
//Invoke registration of encode_type<T>. typeid(encode_type<T>) is now mapped to encode_type<T>. Do not use registered_type for anything.
|
||||
//The reason for registering encode_type<T> rather than T, is that VC handles typeid(function reference) poorly. By adding another
|
||||
//level of indirection, we solve this problem.
|
||||
typedef typename msvc_register_type<input_type,msvc_typeid_wrapper<typeid(input_type)> >::id2type registered_type;
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template<typename T> typename disable_if<
|
||||
typename is_function<T>::type,
|
||||
typename encode_type<T>::input_type>::type encode_start(T const&);
|
||||
|
||||
template<typename T> typename enable_if<
|
||||
typename is_function<T>::type,
|
||||
typename encode_type<T>::input_type>::type encode_start(T&);
|
||||
|
||||
template<typename Organizer, typename T>
|
||||
msvc_register_type<T,Organizer> typeof_register_type(const T&);
|
||||
|
||||
|
||||
# define BOOST_TYPEOF(expr) \
|
||||
boost::type_of::msvc_typeid_wrapper<typeid(boost::type_of::encode_start(expr))>::type
|
||||
|
||||
# define BOOST_TYPEOF_TPL(expr) typename BOOST_TYPEOF(expr)
|
||||
|
||||
# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
|
||||
struct name {\
|
||||
enum {_typeof_register_value=sizeof(typeid(boost::type_of::typeof_register_type<name>(expr)))};\
|
||||
typedef typename boost::type_of::msvc_extract_type<name>::id2type id2type;\
|
||||
typedef typename id2type::type type;\
|
||||
};
|
||||
|
||||
# define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
|
||||
struct name {\
|
||||
enum {_typeof_register_value=sizeof(typeid(boost::type_of::typeof_register_type<name>(expr)))};\
|
||||
typedef boost::type_of::msvc_extract_type<name>::id2type id2type;\
|
||||
typedef id2type::type type;\
|
||||
};
|
||||
|
||||
# else
|
||||
template<int ID>
|
||||
struct msvc_typeid_wrapper {
|
||||
typedef typename msvc_extract_type<mpl::int_<ID> >::id2type id2type;
|
||||
@ -211,18 +264,19 @@ namespace boost
|
||||
|
||||
# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
|
||||
struct name {\
|
||||
enum {_typeof_register_value=sizeof(boost::type_of::typeof_register_type<name>(expr))};\
|
||||
BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(boost::type_of::typeof_register_type<name>(expr)));\
|
||||
typedef typename boost::type_of::msvc_extract_type<name>::id2type id2type;\
|
||||
typedef typename id2type::type type;\
|
||||
};
|
||||
|
||||
# define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
|
||||
struct name {\
|
||||
enum {_typeof_register_value=sizeof(boost::type_of::typeof_register_type<name>(expr))};\
|
||||
BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(boost::type_of::typeof_register_type<name>(expr)));\
|
||||
typedef boost::type_of::msvc_extract_type<name>::id2type id2type;\
|
||||
typedef id2type::type type;\
|
||||
};
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
0
include/boost/typeof/native.hpp
Normal file → Executable file
0
include/boost/typeof/native.hpp
Normal file → Executable file
0
include/boost/typeof/pointers_data_members.hpp
Normal file → Executable file
0
include/boost/typeof/pointers_data_members.hpp
Normal file → Executable file
0
include/boost/typeof/register_fundamental.hpp
Normal file → Executable file
0
include/boost/typeof/register_fundamental.hpp
Normal file → Executable file
0
include/boost/typeof/register_mem_functions.hpp
Normal file → Executable file
0
include/boost/typeof/register_mem_functions.hpp
Normal file → Executable file
0
include/boost/typeof/std/bitset.hpp
Normal file → Executable file
0
include/boost/typeof/std/bitset.hpp
Normal file → Executable file
0
include/boost/typeof/std/complex.hpp
Normal file → Executable file
0
include/boost/typeof/std/complex.hpp
Normal file → Executable file
0
include/boost/typeof/std/deque.hpp
Normal file → Executable file
0
include/boost/typeof/std/deque.hpp
Normal file → Executable file
0
include/boost/typeof/std/fstream.hpp
Normal file → Executable file
0
include/boost/typeof/std/fstream.hpp
Normal file → Executable file
0
include/boost/typeof/std/functional.hpp
Normal file → Executable file
0
include/boost/typeof/std/functional.hpp
Normal file → Executable file
0
include/boost/typeof/std/iostream.hpp
Normal file → Executable file
0
include/boost/typeof/std/iostream.hpp
Normal file → Executable file
0
include/boost/typeof/std/istream.hpp
Normal file → Executable file
0
include/boost/typeof/std/istream.hpp
Normal file → Executable file
0
include/boost/typeof/std/iterator.hpp
Normal file → Executable file
0
include/boost/typeof/std/iterator.hpp
Normal file → Executable file
0
include/boost/typeof/std/list.hpp
Normal file → Executable file
0
include/boost/typeof/std/list.hpp
Normal file → Executable file
0
include/boost/typeof/std/locale.hpp
Normal file → Executable file
0
include/boost/typeof/std/locale.hpp
Normal file → Executable file
0
include/boost/typeof/std/map.hpp
Normal file → Executable file
0
include/boost/typeof/std/map.hpp
Normal file → Executable file
0
include/boost/typeof/std/memory.hpp
Normal file → Executable file
0
include/boost/typeof/std/memory.hpp
Normal file → Executable file
0
include/boost/typeof/std/ostream.hpp
Normal file → Executable file
0
include/boost/typeof/std/ostream.hpp
Normal file → Executable file
0
include/boost/typeof/std/queue.hpp
Normal file → Executable file
0
include/boost/typeof/std/queue.hpp
Normal file → Executable file
0
include/boost/typeof/std/set.hpp
Normal file → Executable file
0
include/boost/typeof/std/set.hpp
Normal file → Executable file
0
include/boost/typeof/std/sstream.hpp
Normal file → Executable file
0
include/boost/typeof/std/sstream.hpp
Normal file → Executable file
0
include/boost/typeof/std/stack.hpp
Normal file → Executable file
0
include/boost/typeof/std/stack.hpp
Normal file → Executable file
0
include/boost/typeof/std/streambuf.hpp
Normal file → Executable file
0
include/boost/typeof/std/streambuf.hpp
Normal file → Executable file
0
include/boost/typeof/std/string.hpp
Normal file → Executable file
0
include/boost/typeof/std/string.hpp
Normal file → Executable file
0
include/boost/typeof/std/utility.hpp
Normal file → Executable file
0
include/boost/typeof/std/utility.hpp
Normal file → Executable file
0
include/boost/typeof/std/valarray.hpp
Normal file → Executable file
0
include/boost/typeof/std/valarray.hpp
Normal file → Executable file
0
include/boost/typeof/std/vector.hpp
Normal file → Executable file
0
include/boost/typeof/std/vector.hpp
Normal file → Executable file
0
include/boost/typeof/template_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/template_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/template_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/template_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/type_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/type_encoding.hpp
Normal file → Executable file
0
include/boost/typeof/type_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/type_template_param.hpp
Normal file → Executable file
0
include/boost/typeof/typeof_impl.hpp
Normal file → Executable file
0
include/boost/typeof/typeof_impl.hpp
Normal file → Executable file
0
include/boost/typeof/vector.hpp
Normal file → Executable file
0
include/boost/typeof/vector.hpp
Normal file → Executable file
0
include/boost/typeof/vector100.hpp
Normal file → Executable file
0
include/boost/typeof/vector100.hpp
Normal file → Executable file
0
include/boost/typeof/vector150.hpp
Normal file → Executable file
0
include/boost/typeof/vector150.hpp
Normal file → Executable file
0
include/boost/typeof/vector200.hpp
Normal file → Executable file
0
include/boost/typeof/vector200.hpp
Normal file → Executable file
0
include/boost/typeof/vector50.hpp
Normal file → Executable file
0
include/boost/typeof/vector50.hpp
Normal file → Executable file
16
meta/libraries.json
Normal file
16
meta/libraries.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"key": "typeof",
|
||||
"name": "Typeof",
|
||||
"authors": [
|
||||
"Arkadiy Vertleyb",
|
||||
"Peder Holt"
|
||||
],
|
||||
"description": "Typeof operator emulation.",
|
||||
"category": [
|
||||
"Emulation"
|
||||
],
|
||||
"maintainers": [
|
||||
"Arkadiy Vertleyb <vertleyb -at- hotmail.com>",
|
||||
"Peder Holt <peder.holt -at- gmail.com>"
|
||||
]
|
||||
}
|
0
test/data_member.cpp
Normal file → Executable file
0
test/data_member.cpp
Normal file → Executable file
2
test/function.cpp
Normal file → Executable file
2
test/function.cpp
Normal file → Executable file
@ -6,5 +6,3 @@
|
||||
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void()>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<double(bool)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(...)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<float(int, ...)>::value);
|
||||
|
16
test/function_binding.cpp
Normal file → Executable file
16
test/function_binding.cpp
Normal file → Executable file
@ -7,16 +7,8 @@
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
int foo1(double);
|
||||
int foo2(...);
|
||||
int foo3(int, ...);
|
||||
typedef int(&FREF1)(double);
|
||||
typedef int(&FREF2)(...);
|
||||
typedef int(&FREF3)(int, ...);
|
||||
FREF1 fref1 = *foo1;
|
||||
FREF2 fref2 = *foo2;
|
||||
FREF3 fref3 = *foo3;
|
||||
int foo(double);
|
||||
typedef int(&FREF)(double);
|
||||
FREF fref = *foo;
|
||||
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(fref1), int(double)>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(fref2), int(...)>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(fref3), int(int,...)>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(fref), int(double)>::value));
|
||||
|
17
test/function_ptr.cpp
Normal file → Executable file
17
test/function_ptr.cpp
Normal file → Executable file
@ -8,19 +8,12 @@ BOOST_STATIC_ASSERT(boost::type_of::test<double(*)()>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<double(*)(int, double, short, char*, bool, char, float, long, unsigned short)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(*)()>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(*)(int, double, short, char*, bool, char, float, long, unsigned short)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(*)(...)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(*)(int, double, short, char*, bool, char, float, long, unsigned short, ...)>::value);
|
||||
|
||||
// check that const gets stripped from function pointer
|
||||
|
||||
int foo1(double);
|
||||
int foo2(...);
|
||||
typedef int(*PTR1)(double);
|
||||
typedef int(*PTR2)(...);
|
||||
typedef const PTR1 CPTR1;
|
||||
typedef const PTR2 CPTR2;
|
||||
CPTR1 cptr1 = foo1;
|
||||
CPTR2 cptr2 = foo2;
|
||||
int foo(double);
|
||||
typedef int(*PTR)(double);
|
||||
typedef const PTR CPTR;
|
||||
CPTR cptr = foo;
|
||||
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(cptr1), PTR1>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(cptr2), PTR2>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(cptr), PTR>::value));
|
||||
|
20
test/function_ptr_from_tpl.cpp
Normal file → Executable file
20
test/function_ptr_from_tpl.cpp
Normal file → Executable file
@ -6,23 +6,15 @@
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
void f1() {}
|
||||
void f2(...) {}
|
||||
void f()
|
||||
{}
|
||||
|
||||
template<class T>
|
||||
struct tpl1
|
||||
struct tpl
|
||||
{
|
||||
typedef BOOST_TYPEOF_TPL(&f1) type;
|
||||
typedef BOOST_TYPEOF_TPL(&f) type;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct tpl2
|
||||
{
|
||||
typedef BOOST_TYPEOF_TPL(&f2) type;
|
||||
};
|
||||
|
||||
typedef void(*fun1_type)();
|
||||
typedef void(*fun2_type)(...);
|
||||
typedef void(*fun_type)();
|
||||
|
||||
BOOST_STATIC_ASSERT((boost::is_same<tpl1<void>::type, fun1_type>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<tpl2<void>::type, fun2_type>::value));
|
||||
BOOST_STATIC_ASSERT((boost::is_same<tpl<void>::type, fun_type>::value));
|
||||
|
2
test/function_ref.cpp
Normal file → Executable file
2
test/function_ref.cpp
Normal file → Executable file
@ -6,5 +6,3 @@
|
||||
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<void(&)()>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<int(&)(int, short)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<int(&)(...)>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<int(&)(int,...)>::value);
|
||||
|
0
test/member_function.cpp
Normal file → Executable file
0
test/member_function.cpp
Normal file → Executable file
0
test/modifiers.cpp
Normal file → Executable file
0
test/modifiers.cpp
Normal file → Executable file
0
test/noncopyable.cpp
Normal file → Executable file
0
test/noncopyable.cpp
Normal file → Executable file
0
test/odr.hpp
Normal file → Executable file
0
test/odr.hpp
Normal file → Executable file
0
test/odr1.cpp
Normal file → Executable file
0
test/odr1.cpp
Normal file → Executable file
0
test/odr2.cpp
Normal file → Executable file
0
test/odr2.cpp
Normal file → Executable file
0
test/odr_no_uns1.cpp
Normal file → Executable file
0
test/odr_no_uns1.cpp
Normal file → Executable file
0
test/odr_no_uns1.hpp
Normal file → Executable file
0
test/odr_no_uns1.hpp
Normal file → Executable file
0
test/odr_no_uns2.cpp
Normal file → Executable file
0
test/odr_no_uns2.cpp
Normal file → Executable file
0
test/odr_no_uns2.hpp
Normal file → Executable file
0
test/odr_no_uns2.hpp
Normal file → Executable file
0
test/std.cpp
Normal file → Executable file
0
test/std.cpp
Normal file → Executable file
0
test/template_dependent.cpp
Normal file → Executable file
0
test/template_dependent.cpp
Normal file → Executable file
0
test/template_enum.cpp
Normal file → Executable file
0
test/template_enum.cpp
Normal file → Executable file
0
test/template_int.cpp
Normal file → Executable file
0
test/template_int.cpp
Normal file → Executable file
0
test/template_multiword.cpp
Normal file → Executable file
0
test/template_multiword.cpp
Normal file → Executable file
0
test/template_tpl.cpp
Normal file → Executable file
0
test/template_tpl.cpp
Normal file → Executable file
0
test/template_type.cpp
Normal file → Executable file
0
test/template_type.cpp
Normal file → Executable file
0
test/test.hpp
Normal file → Executable file
0
test/test.hpp
Normal file → Executable file
0
test/type.cpp
Normal file → Executable file
0
test/type.cpp
Normal file → Executable file
@ -1,7 +1,7 @@
|
||||
# // (C) Copyright Tobias Schwinger
|
||||
# //
|
||||
# // Use modification and distribution are subject to the boost Software License
|
||||
# // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
|
||||
# // Version 1.0. (See http:/\/www.boost.org/LICENSE_1_0.txt).
|
||||
|
||||
# // Preprocess and run this script.
|
||||
# //
|
||||
|
Reference in New Issue
Block a user