Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'expressie': onjuist argument voor 'decltype'
Opmerkingen
De compiler kan het type expressie dat het argument is voor de decltype(expressietypeaanduiding) niet afleiden.
Example
In het volgende codevoorbeeld kan de compiler het type van het myFunction argument niet afleiden omdat myFunction overladen is. U kunt dit probleem oplossen door static_cast een exemplaar van een aanwijzer te maken naar de specifieke overbelaste functie om op te geven in de decltype expressie.
// 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);
}