用于类型比较的 Boost 静态断言

2024-04-13

以下问题给我编译器错误,我不知道如何正确编写它

struct FalseType { enum { value = false }; };
struct TrueType { enum { value = true }; };


template <typename T1, typename T2>
struct IsSame
{
typedef typename FalseType Result;
};


template <typename T>
struct IsSame<T,T>
{
typedef typename TrueType Result;
};

BOOST_STATIC_ASSERT( (IsSame< Foo::FooClass1 , Foo::FooClass1 >::Result::value) );

这个静态断言在使用时不应失败,但不知何故,CUDA 的编译器 NVCC 给出了以下错误:

error C2338: (IsSame< Foo::FooClass1 , Foo::FooClass1 >::Result::value)

我不知道该怎么办,所有其他静态断言都有效,但类型比较不起作用,那里出了什么问题?打字错误?括号?

我无法在 NVCC 下进行类型比较?

有任何想法吗?

看起来 MSVC(由 NVCC 路由到)也有其问题以及上述版本.... 嗯...

=============编辑======================== 这是在 MSVC 中不起作用的片段!

这个片段应该在 MSVC 中编译,但它没有,所以我假设编译器错误:

错误C2118:负下标(WHHHHHYYYYYY)奇怪......

#include <iostream>


using namespace std;


struct FalseType { static const bool  value = false ; };
struct TrueType {  static const bool  value = true ; };


template <typename T1, typename T2>
struct IsSame
{
  typedef ::FalseType Result;
  static const bool result = false;
};


template <typename T>
struct IsSame<T,T>
{
typedef ::TrueType Result;
static const bool result = true;
};

namespace OtherType{
   struct Type1{};
};

template< typename _T> // Settings from below
struct Settings{
   typedef _T myT;
   typedef char static_assert_failed[ ((IsSame< _T,OtherType::Type1>::Result::value)) ? 1 : -1 ]; // USE HERE only ::result works, (BUT WHY)
};

int main(){

   cout << (IsSame<OtherType::Type1,OtherType::Type1>::Result::value)<< endl;

}

typedef typename FalseType Result;
typedef typename  TrueType Result;

这是错误的,因为FalseType and TrueType不是从属名称,因此typename在这里是非法的。

它应该是

typedef FalseType Result;
typedef  TrueType Result;

Update

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于类型比较的 Boost 静态断言 的相关文章

随机推荐