컴파일러 오류 C3556
'expression': 'decltype'의 인수가 잘못되었습니다.
컴파일러가 decltype(
expression)
형식 지정자의 인수인 식의 형식을 추론할 수 없습니다.
예시
다음 코드 예제에서는 myFunction
이 오버로드되어 컴파일러가 myFunction
인수의 형식을 추론할 수 없습니다. 이 문제를 해결하려면 식에 지정할 특정 오버로드된 함수에 대한 포인터 인스턴스를 만드는 데 사용할 static_cast
수 있습니다 decltype
.
// C3556.cpp
// compile with: cl /W4 /EHsc C3556.cpp
#include <iostream>
void myFunction(int);
void myFunction(float, float);
void callsMyFunction(decltype(myFunction) fn); // C3556
// One way to fix is to comment out the line above, and
// use static_cast to create specialized function pointer
// instances:
auto myFunctionInt = static_cast<void(*)(int)>(myFunction);
auto myFunctionFloatFloat = static_cast<void(*)(float,float)>(myFunction);
void callsMyFunction(decltype(myFunctionInt) fn, int n);
void callsMyFunction(decltype(myFunctionFloatFloat) fn, float f, float g);
void myFunction(int i) {
std::cout << "called myFunction(" << i << ")" << std::endl;
}
void myFunction(float f, float g) {
std::cout << "called myFunction(" << f << ", " << g << ")" << std::endl;
}
void callsMyFunction(decltype(myFunctionInt) fn, int n) {
fn(n);
}
void callsMyFunction(decltype(myFunctionFloatFloat) fn, float f, float g) {
fn(f, g);
}
int main() {
callsMyFunction(myFunction, 42);
callsMyFunction(myFunction, 0.1f, 2.3f);
}