一段可以判断编译器厂家的神奇代码

#include <cstdio>

struct T1 {};
struct T2 {};
struct U1 {};
struct U2 {};

struct A {
    using T = T1;
    using U = U1;
    operator U1 T1::*() { return nullptr; }
    operator U1 T2::*() { return nullptr; }
    operator U2 T1::*() { return nullptr; }
    operator U2 T2::*() { return nullptr; }
};

inline auto which(U1 T1::*) { return "gcc"; }
inline auto which(U1 T2::*) { return "icc"; }
inline auto which(U2 T1::*) { return "msvc"; }
inline auto which(U2 T2::*) { return "clang"; }

int main() {
    A a;
    using T = T2;
    using U = U2;
    puts(which(a.operator U T::*()));
    return 0;
}

真的可以在不同编译器输出不同结果😄

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容