프로그래밍 언어/C/C++

[C++] 소스코드에서 컴파일러 구분하기?

소혼 2021. 1. 19. 21:56
반응형

원본 : https://quuxplusone.github.io/blog/2021/01/13/conversion-operator-lookup/

친구의 페이스북에 올라온 C++ 컴파일러 구분하기 란 글을 보았다.
역시 난 C++을 모르는듯 ㅎㅎ

여기서 핵심은 U 와 T가 무엇으로 lookup되어야 하는지를 정하는게 표준에 있는데
컴파일러가 제멋대로 구현했다는 것 같다.

U, T 모두에 대해서 gcc만 제대로 A scope으로 룩업한다고...

code link : https://godbolt.org/z/jo3dc4

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

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

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::*()));
}

C++ 문법을 한번 봐야겠다는 생각이 드네

반응형

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

[C++11] std::enable_shared_from_this  (0) 2018.02.06
[읽은 글] const correctness  (0) 2016.10.18
[C++11] std::function의 성능  (0) 2015.05.29
GCC options  (0) 2013.12.05
[C++11] Range based for loop  (4) 2013.11.13