__VA_ARGS__ SendRecvImpl( \
const __VA_ARGS__& SendValue, const int SendDestination, const int SendTag, \
const int RecvSource, const int RecvTag) const override; \
std::vector<__VA_ARGS__> SendRecvImpl(const std::vector<__VA_ARGS__>& rSendValues, \
const int SendDestination, const int SendTag, \
const int RecvSource, const int RecvTag) const override; \
void SendRecvImpl( \
const __VA_ARGS__& SendValue, const int SendDestination, const int SendTag, \
__VA_ARGS__& RecvValue, const int RecvSource, const int RecvTag) const override; \
void SendRecvImpl( \
const std::vector<__VA_ARGS__>& rSendValues, const int SendDestination, const int SendTag, \
std::vector<__VA_ARGS__>& rRecvValues, const int RecvSource, const int RecvTag) const override; \
void SendImpl(const __VA_ARGS__& rSendValues, \
const int SendDestination, const int SendTag = 0) const override; \
void SendImpl(const std::vector<__VA_ARGS__>& rSendValues, \
const int SendDestination, const int SendTag = 0) const override; \
void RecvImpl(__VA_ARGS__& rRecvValues, \
const int RecvSource, const int RecvTag = 0) const override; \
void RecvImpl(std::vector<__VA_ARGS__>& rRecvValues, \
const int RecvSource, const int RecvTag = 0) const override; \