Можно ли сделать следующий псевдокод компиляцией без определения явной специализации GetValue<void>
?
template <class Increment = void>
inline int GetValue(const Increment & inc = {})
{
if constexpr (std::is_same_v<Increment, void>)
{
return 25;
}
else
{
return 25 + inc;
}
}
int main()
{
std::cout << GetValue(1) << std::endl; //compiles
std::cout << GetValue() << std::endl; //does not compile
}
В этом псевдокоде я передаю в качестве параметра GetValue либо значение, на которое я увеличиваю 25 константа или некоторое значение, которое указывает «абсолютно ничего». И не совсем понятно, что это за «абсолютно ничто» и как его представить, если параметр типа void
не компилируется.
Если я определяю поддельный тип, такой как
struct Nothing {};
это, вероятно, выглядит ничем, но не как «абсолютно ничто».