C++ アクター フレームワーク (CAF)で厳密に型指定されたアクターを宣言しようとしていますが、何らかの理由でコードがコンパイルされません。何が悪いのか教えていただけますか?
#include "caf/all.hpp"
template <typename TNum>
class DiscoverRequest {};
template <typename TNum>
class DiscoverResponse {};
template <typename TNum>
class DataRequest {};
template <typename TNum>
class DataResponse {};
template <typename TNum>
using BlockActor = caf::typed_actor<
/* ERROR NEXT LINE */
caf::replies_to<DiscoverRequest<TNum>>::with<DiscoverResponse<TNum>>,
caf::replies_to<DataRequest<TNum>> ::with<DataResponse<TNum>> >;
エラーメッセージ:
Block.hh:13:71: error: type/value mismatch at argument 1 in template
parameter list for 'template<class ... Sigs> class caf::typed_actor'
caf::replies_to<DiscoverRequest<TNum>>::with<DiscoverResponse<TNum>>,
^
Block.hh:13:71: error: expected a type, got
'(caf::replies_to<DiscoverRequest<TNum> >::with < <expression error>)'
DiscoverRequest<TNum>
しかし、 andDiscoverResponse<TNum>
を特定のインスタンス化 (たとえば、 など)に置き換えると、DiscoverRequest<float>
うまくコンパイルされます。したがって、CAF 内部の何かがそのような構造の使用を禁止していると思います。
私のコンパイラは GCC G++ 4.9.2 (-std=c++11
もちろん 付き) で、Fedora 21 で動作しています。CAFはそのブランチの最新リビジョンmaster
であり、Git サブモジュールとしてプロジェクトにリンクされています。