}
template <class OtherPacket>
+prefix_ OtherPacket senf::Packet::next(NoThrow_t)
+ const
+{
+ Packet p (next(nothrow));
+ return p && p.is<OtherPacket>() ? p.as<OtherPacket>() : OtherPacket();
+}
+
+template <class OtherPacket>
+prefix_ OtherPacket senf::Packet::find()
+ const
+{
+ OtherPacket p (find<OtherPacket>(nothrow));
+ if (!p) throw InvalidPacketChainException();
+ return p;
+}
+
+template <class OtherPacket>
prefix_ OtherPacket senf::Packet::prev()
const
{
}
template <class OtherPacket>
+prefix_ OtherPacket senf::Packet::prev(NoThrow_t)
+ const
+{
+ Packet p (prev(nothrow));
+ return p && p.is<OtherPacket>() ? p.as<OtherPacket>() : OtherPacket();
+}
+
+template <class OtherPacket>
+prefix_ OtherPacket senf::Packet::rfind()
+ const
+{
+ OtherPacket p (rfind<OtherPacket>(nothrow));
+ if (!p) throw InvalidPacketChainException();
+ return p;
+}
+
+template <class OtherPacket>
prefix_ OtherPacket senf::Packet::last()
const
{