該代碼用VS(/ za)編譯,但不能用GCC編譯。誰是對的,誰是錯的?或者兩者都是錯誤的/正確的?GCC vs VS匿名類型作爲模板參數
#include <iostream>
#include <type_traits>
using namespace std;
struct NullType
{
//NullType(){}
template<class T>
NullType(T value){}
enum {value};
};
template<class T>
struct IntType
{
typedef T type;
};
template<int value_>
struct Low
{
typedef int type;
enum {value = value_};
};
template< class T>
struct Low_impl
{
protected:
T value_;
Low_impl():value_(T()){/*e.b.*/}
Low_impl(T value):value_(value){/*e.b.*/}
};
template<class T>
struct isNullType
{
enum {value = false};
};
template<>
struct isNullType<NullType>
{
enum {value = true};
};
template<class T>
struct TypeTraits
{
typedef T type;
};
/*template<>
struct TypeTraits<int>
{
typedef int type;
};*/
template<class Int_>
struct Int_Type_Tag
{
static_assert(std::is_integral<Int_>::type,"Non Integral Type Is ILLEGAL As a Parameter to this class ");
typedef Int_ type;
};
template<class T>
struct TypeTraits<Int_Type_Tag<T>>
{
typedef typename Int_Type_Tag<T>::type type;
};
template<class Int_Type,class L = NullType>
struct Int : private std::conditional<isNullType<L>::value,
NullType,
Low_impl<typename TypeTraits<Int_Type>::type>>::type
{
typedef typename std::conditional<isNullType<L>::value,
NullType,
Low_impl<typename TypeTraits<Int_Type>::type>>::type BaseType;
Int():BaseType(L::value){}
};
int main()
{
Int<int> a;
cout << sizeof(a);
return 0;
}
從GCC 4.5.1錯誤
錯誤:調用 '零式::零式(零式:: &)' 不匹配函數|
添加'boost'標籤。 – Beta 2011-03-13 16:47:36
我投票結束,因爲這不是一個真正的問題。當你不發佈代碼應該做什麼*或者應該怎麼做,或者GCC的編譯器錯誤時,我們當中的任何人應該知道該怎麼做? – Puppy 2011-03-13 16:48:18
您在GCC中遇到什麼錯誤?哪裏? – 2011-03-13 16:48:29