C++ 템플릿을 사용하여 궁극적으로 호출되지 않는 함수가 포함 된 라이브러리와의 연결을 피할 수 있습니까? 예를 들어, 다음과 같은 코드 :연결을 피하기 위해 cpp 전 처리기 대신 템플리트?
template <typename T>
struct Foo {
void bar() { zod(); }
};
int main(int argc, char *argv[])
{
return 0;
}
GCC 4.5을 거부합니다 : 오류 : 템플릿 매개 변수에 따라 '조드'에 인수, 그래서 '조드'의 선언이 가능해야이 없습니다 참고 : ('-fpermissive'를 사용하면 G ++에서 코드를 허용하지만 선언되지 않은 이름의 사용은 권장되지 않습니다.)
여기에 표준으로 오류가 있습니까? 템플릿을 사용하여이를 달성하는 방법이 있습니까? 따라서 cpp 매크로는 사용하지 마십시오.
+1. 그 일로 결코 호출되지 않는 비 인라인 함수는 많은 링커에 의해 제거되어 아무런 문제가 발생하지 않습니다. 나는 또한 표준 상태에 대해 확신하지 못한다 ... "odr-used"와 관련이있을 것이다. – Potatoswatter
MSVC 10 인라인 없이는 작동하지 않는다고 말할 수 있습니다. –
이것은 좋아 보인다. Digital Mars Compiler 8.42n을 사용하여 템플릿과 인라인 모두에서 작동합니다. GCC 4.5 및 4.6. – user2023370