Идеальный метод пересылки без получения

Я получаю ошибку SFINAE со следующим кодом, поскольку он не будет использовать шаблон. Я пытаюсь усовершенствовать арги в результате. Любые идеи кто-нибудь.

#include <iostream>

#include "constants.h"

namespace perfectforwarding
{
template<class T, class U>
constexpr auto maximum(T&& a, U&& b) -> decltype( (a > b) ? std::forward(a) : std::forward(b))
{
return (a > b) ? std::forward(a) : std::forward(b);
}
}int main(int argc, const char * argv[])
{

std::cout << "Created count is: " << created_count << std::endl;

auto const result = perfectforwarding::maximum(5,6.0);

std::cout << "The maximum of 5 and 6: " << result << std::endl;
return 0;
}

блэр

1

Решение

std::forward является шаблоном, и вам нужно явно указать аргумент типа, если вы хотите, чтобы он работал правильно. Вот как твоя maximum Шаблон функции должен быть переписан:

template<class T, class U>
constexpr auto maximum(T&& a, U&& b) ->
decltype( (a > b) ? std::forward<T>(a) : std::forward<U>(b))
{
return (a > b) ? std::forward<T>(a) : std::forward<U>(b);
}

Вот как std::forward Утилита определяется:

template<class T>
T&& forward(typename remove_reference<T>::type& a) noexcept
{
return static_cast<S&&>(a);
}

Выражение typename remove_reference<T>::type делает это не выводимым контекстом, который объясняет, почему вывод типа завершается неудачей, если вы явно не предоставили аргумент типа T,

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]