C++ Typedef签名与签名别名

C++ Typedef签名与签名别名,c++,c++11,alias,typedef,C++,C++11,Alias,Typedef,为什么我可以编译以下内容: typedef void OnSuccessSignature(PathFinderType::EdgePath); 但不是这个 using OnSuccessSignature = void(PathFinderType::EdgePath); 第二行给出了一个C2061:语法错误:标识符“EdgePath” 如果有差异,类的相关部分定义为 class MapManager : public Service<MapManager> { public:

为什么我可以编译以下内容:

typedef void OnSuccessSignature(PathFinderType::EdgePath);
但不是这个

using OnSuccessSignature = void(PathFinderType::EdgePath);
第二行给出了一个C2061:语法错误:标识符“EdgePath”

如果有差异,类的相关部分定义为

class MapManager : public Service<MapManager>
{
public:
    //  Aliases.
    using PathFinderType = AStar<Map::MapNodeType, WeightedEuclideanDistance<Map::MapNodeType>>;
    using OnSuccessSignature = void(PathFinderType::EdgePath);

    //  ...
}

我在第一个标题中包含了第二个标题。

我正在查看typedef的规则,但我看不懂:真的吗?我会尝试一次清洁和重建,然后做。我的钱在MSVC bug上。@MooingDuck IIRC,rextester.com运行VS2013 RTM,而不是CTP。它运行。但是为了一致性,你知道。。。啊,好吧,见鬼去吧。
template <typename TNode, typename THeuristic = EuclideanDistanceSqrd<TNode>>
class AStar : Detail::AStarHeap<TNode>
{
public:
    //  Aliases.
    using EdgePath = list<typename TNode::EdgeType*>;

    //   ...
}