Skip to content
败犬日报 2025-10-08

败犬日报 2025-10-08

1. 不用预处理器,判断功能特性测试宏有无定义

https://www.zhihu.com/question/644615607/answer/1941993383804540457

省流:long(x); 可以定义变量(等同于 long x;),作为参数后 long(long(x)) 就是一个函数类型;而 long(long(1)) 显然是一个数字。

cpp
#include <iostream>

template <long N>
constexpr bool is_constant() {
    return true;
}

template <typename T>
constexpr bool is_constant() {
    return false;
}

#define X 1

int main() {
    std::cout << is_constant<long(long(X))>() << "\n";  // 输出 1
    std::cout << is_constant<long(long(Y))>() << "\n";  // 输出 0
}