Rule A8-2-1 (required, implementation, automated)
When declaring function templates, the trailing return type syntax shall be used if the return type depends on the type of parameters.
Rationale
Use of trailing return type syntax avoids a fully qualified return type of a function along with the typename keyword.
Example
// $Id: A8-2-1.cpp 289436 2017-10-04 10:45:23Z michal.szczepankiewicz $
#include <cstdint>
template <typename T>
class A
{
public:
using Type = std::int32_t;
Type F(T const&) noexcept;
Type G(T const&) noexcept;
};
template <typename T>
typename A<T>::Type A<T>::F(T const&) noexcept // Non-compliant
{
// Implementation
}
template <typename T>
auto A<T>::G(T const&) noexcept -> Type // Compliant
{
// Implementation
}
See also
HIC++ v4.0 [9]: 7.1.7 Use a trailing return type in preference to type disambiguation using typename.