当使用 CRT 模式期望 true 时,std::is_same_v 奇怪地返回 false

问题描述 投票:0回答:1
#include <iostream>
#include <type_traits>

template <template <typename,unsigned,typename...>typename interface,typename T,unsigned ChannelN, typename...Args>
struct base : public interface<T,ChannelN,Args...>{
    public:
    using Scalar = T;
};

template<typename T, unsigned ChannelN,typename... ColourT>
struct I{
    
};

template <typename T,unsigned ChannelN>
struct Scalar : public base<I,T,ChannelN>
{
     using DoubleT = double;
     using Name= Scalar;
     using base<I, T, ChannelN>::base;
};

int main()
{
   std::cout<<std::is_same_v<typename Scalar<int,1>::Scalar,int>;
  return 0;
}

我有一个类似于上面结构的大型代码,当我期望它为真时,代码返回 false,我认为 struct Scalar 中的

using Name = Scalar
和 struct base 中的
using Scalar = T
之间存在冲突。如何在不改变的情况下解决这个问题?
    

c++ oop type-traits
1个回答
0
投票
如何在不使用 Scalar=T 进行更改的情况下解决此问题?

using Scalar=T

更改为

using Name = Scalar

然后在使用
using Name= typename base<I,T,ChannelN>::Scalar; //changed this

的时候,使用上面修改后的

std::is_same_v
如下图:
Name

工作演示

现在程序的输出就是你想要的了

//------------------------------------------------vvvv------>use Name instead of Scalar std::cout<<std::is_same_v<typename Scalar<int,1>::Name,int>;

    

© www.soinside.com 2019 - 2024. All rights reserved.