는 간단한 프로그램 다음 고려 : 그것은 VC++
에서 잘 컴파일하지만 g++
& clang++
는 컴파일 오류를 제공C++, g ++/clang ++ vC++의 함수 주소를 출력하시오. 누가 맞습니까?
#include <iostream>
void foo() { }
int main() {
std::cout<<static_cast<void*>(foo);
}
.
source_file.cpp: In function ‘int main()’:
source_file.cpp:4:38: error: invalid static_cast from type ‘void()’ to type ‘void*’
std::cout<<static_cast<void*>(foo);
^
:
라이브 데모 here (VC++
)
참조 라이브 데모 here (clang++
)
참조 라이브 데모 g++
& clang++
에 의해 주어진 here (g++
)
진단을 참조하십시오
그래서, 컴파일러는 C++ 표준에 따라 어떤 질문을합니까? 나는 g++
& clang++
의 행동이 여기에 맞다고 생각합니다. static_cast
대신 여기 reinterpret_cast
을 사용해야 함을 알고 있습니다. 이 버그는 VC++
컴파일러에 있습니까? 대답이 C++의 특정 표준에 달려있다면 나는 그것에 대해서 알고 싶어합니다. this pointers-to-void reference에서
foo가 함수 포인터로 사라집니다. – Destructor
MSVC의 정확성을 원하면 MSVC14.1을 최근에 추가 된/permissive-with와 함께 사용해야합니다. 또한 일반적으로 VC++ 대신 MSVC라고도합니다. – tambre