forked from boostorg/typeof
Merge with the offending files removed.
[SVN r39995]
This commit is contained in:
Executable
+26
@@ -0,0 +1,26 @@
|
||||
|
||||
template<typename ID>
|
||||
struct msvc_extract_type
|
||||
{
|
||||
template<bool>
|
||||
struct id2type_impl;
|
||||
|
||||
typedef id2type_impl<true> id2type;
|
||||
};
|
||||
|
||||
template<typename T, typename ID>
|
||||
struct msvc_register_type : msvc_extract_type<ID>
|
||||
{
|
||||
template<>
|
||||
struct id2type_impl<true> //VC7.0 specific bugfeature
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
};
|
||||
|
||||
int main() {
|
||||
sizeof(msvc_register_type<double,int>);
|
||||
typedef msvc_extract_type<int>::id2type::type deduced_type;
|
||||
deduced_type f=5.0;
|
||||
return 0;
|
||||
}
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
|
||||
struct msvc_extract_type_default_param {};
|
||||
|
||||
template<typename ID, typename T = msvc_extract_type_default_param>
|
||||
struct msvc_extract_type;
|
||||
|
||||
template<typename ID>
|
||||
struct msvc_extract_type<ID, msvc_extract_type_default_param> {
|
||||
template<bool>
|
||||
struct id2type_impl;
|
||||
|
||||
typedef id2type_impl<true> id2type;
|
||||
};
|
||||
|
||||
template<typename ID, typename T>
|
||||
struct msvc_extract_type : msvc_extract_type<ID,msvc_extract_type_default_param>
|
||||
{
|
||||
template<>
|
||||
struct id2type_impl<true> //VC8.0 specific bugfeature
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
template<bool>
|
||||
struct id2type_impl;
|
||||
|
||||
typedef id2type_impl<true> id2type;
|
||||
};
|
||||
|
||||
template<typename T, typename ID>
|
||||
struct msvc_register_type : msvc_extract_type<ID, T>
|
||||
{
|
||||
};
|
||||
|
||||
int main() {
|
||||
sizeof(msvc_register_type<double,int>);
|
||||
typedef msvc_extract_type<int>::id2type::type deduced_type;
|
||||
deduced_type f=5.0;
|
||||
return 0;
|
||||
}
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
|
||||
template<typename ID>
|
||||
struct msvc_extract_type
|
||||
{
|
||||
struct id2type;
|
||||
};
|
||||
|
||||
template<typename T, typename ID>
|
||||
struct msvc_register_type : msvc_extract_type<ID>
|
||||
{
|
||||
typedef msvc_extract_type<ID> base_type;
|
||||
struct base_type::id2type // This uses nice VC6.5 and VC7.1 bugfeature
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
};
|
||||
|
||||
int main() {
|
||||
sizeof(msvc_register_type<double,int>);
|
||||
typedef msvc_extract_type<int>::id2type::type deduced_type;
|
||||
deduced_type f=5.0;
|
||||
return 0;
|
||||
}
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#include <typeinfo>
|
||||
|
||||
template<const std::type_info& info>
|
||||
struct msvc_register_type {
|
||||
};
|
||||
|
||||
int main() {
|
||||
msvc_register_type<typeid(double)>;
|
||||
}
|
||||
@@ -14,3 +14,6 @@ BOOST_STATIC_ASSERT(boost::type_of::test<x[20]>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<const x>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<volatile x>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<volatile const x>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<const x&>::value);
|
||||
BOOST_STATIC_ASSERT(boost::type_of::test<const x*>::value);
|
||||
|
||||
|
||||
+7
-6
@@ -8,23 +8,24 @@
|
||||
#include <boost/typeof/typeof.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/mpl/size_t.hpp>
|
||||
|
||||
namespace boost { namespace type_of {
|
||||
|
||||
template<class T, class U>
|
||||
template<class T, class U>
|
||||
struct test_wrapper{};
|
||||
|
||||
template<class T>
|
||||
template<class T>
|
||||
T test_make(T*);
|
||||
|
||||
template<class T>
|
||||
template<class T>
|
||||
struct test
|
||||
{
|
||||
enum {value = boost::is_same<
|
||||
BOOST_STATIC_CONSTANT(std::size_t,value = (boost::is_same<
|
||||
BOOST_TYPEOF_TPL(test_make((test_wrapper<T, int>*)0)),
|
||||
test_wrapper<T, int>
|
||||
>::value
|
||||
};
|
||||
>::value)
|
||||
);
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user