gpt4 book ai didi

c++ - 提升类型比较的静态断言

转载 作者:太空狗 更新时间:2023-10-29 21:50:11 26 4
gpt4 key购买 nike

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

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)

我不知道该怎么做,所有其他 STATIC ASSERTIONS 工作但类型比较不工作,那里有什么问题?打字错误?括号?

我无法让我的类型比较在 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;

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

应该是

typedef FalseType Result;
typedef TrueType Result;

更新

好像是

IsSame < _T, OtherType::Type1 >::Result::value 

是非法的。问题是

IsSame < _T, OtherType::Type1 >::Result 

必须由typename限定,但从句法上来说是不可能的,也就是说,下面的也是非法的

(typename IsSame <_T, OtherType::Type1 >::Result)::value 

我找到了以下使其工作的解决方案。

typedef typename IsSame <_T, OtherType::Type1 >::Result RealResult;
typedef char static_assert_failed[RealResult::value ? 1 : -1];

HTH.

关于c++ - 提升类型比较的静态断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com