确定要在 "if constexpr" 中使用的特定类型

Determining specific type to use inside "if constexpr"

我正在尝试使用“if constexpr( expr )”并在检测到特定类型时执行操作。

我正在修改以下内容:

#include <iostream>
#include <type_traits>

struct aT {};
struct bT {};
struct cT {};

constexpr aT atype;
constexpr bT btype;
constexpr cT ctype;

int main()
{
    if constexpr (std::is_same<decltype(atype), aT>::value)
        std::cout << "I am type " << typeid(atype).name() << std::endl;
    else if constexpr (std::is_same<decltype(btype), bT>::value)
        std::cout << "I am type " << typeid(btype).name() << std::endl;
    else if constexpr (std::is_same<decltype(ctype), cT>::value)
        std::cout << "I am type " << typeid(ctype).name() << std::endl;
}

我没有编译 errors/warnings。但是,在执行时,none 的 if constexpr 测试评估为真。

如果有人能对此有所启发,我将不胜感激。

constexpr 在变量声明的上下文中暗示 const。试试这个:

if constexpr (std::is_same<decltype(atype), const aT>::value)
        std::cout << "I am type " << typeid(atype).name() << std::endl;