更新:重现错误的最小代码: 在TypeTraits.hpp中:
namespace fl
{
namespace utilities
{
template <class T>
struct remove_reference
{
using type = T;
};
template <class T>
struct remove_reference<T&>
{
using type = T;
};
template <class T>
struct remove_reference<T&&>
{
using type = T;
};
}
}
在TypeTraits.h中
#include "TypeTraits.hpp"
namespace ftd
{
template <class T> using remove_reference = fl::utilities::remove_reference<T>;
}
在Utility.h中:
#include "TypeTraits.h"
namespace ftd
{
template <class T>
constexpr T&& forward(typename remove_reference<T>::type& t) noexcept
{
return static_cast<T&&>(t);
}
template <class T>
constexpr T&& forward(typename remove_reference<T>::type&& t) noexcept
{
return static_cast<T&&>(t);
}
}
首次使用转发功能: 在List.hpp
中#include "Utility.h"
namespace fl
{
namespace containers
{
struct NodeBase { /* code... */ };
/* code... */
template <class T> struct ListNode : public NodeBase
{
/* Code... */
template <class... Args>
ListNode(Args&&... args) : m_data(ftd::forward<T>(args)...) {}
/* Code... */
T m_data;
};
}
}
错误:没有名为'remove_reference'的模板;你是说'std :: remove_reference'吗?