Considere a seguinte função embutida:
// Inline specifier version
#include<iostream>
#include<cstdlib>
inline int f(const int x);
inline int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
e a versão equivalente constexpr:
// Constexpr specifier version
#include<iostream>
#include<cstdlib>
constexpr int f(const int x);
constexpr int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
Minha pergunta é: o constexprespecificador implica o inlineespecificador no sentido de que se um argumento não constante for passado para uma constexprfunção, o compilador tentará inlinea função como se o inlineespecificador tivesse sido colocado em sua declaração?
O padrão C ++ 11 garante isso?
inlineespecificador não tem mais nada a ver com inlining
inlineestá diretamente relacionada ao inlining. Portanto, não, o constexprespecificador não implica o inlineespecificador nesse sentido, pois esse sentido não existe.
inlineespecificador faz. (Ou talvez eu não tenha entendido sua frase.)