minor fixes for clang++
[senf.git] / senf / Packets / Packet.cti
index a428565..0b70b19 100644 (file)
@@ -59,7 +59,10 @@ template <class OtherPacket>
 prefix_ bool senf::Packet::is()
     const
 {
-    return valid() && ptr()->is<typename OtherPacket::type>();
+    // ensure that the template class is included in the corresponding object file when linking:
+    { static typename PacketInterpreter<typename OtherPacket::type>::factory_t _ (
+            PacketInterpreter<typename OtherPacket::type>::factory()); (void) _;}
+    return valid() && typeId() == typeIdValue<OtherPacket>();
 }
 
 template <class OtherPacket>
@@ -334,7 +337,7 @@ prefix_ senf::Packet senf::ConcretePacket<PacketType>::next(NoThrow_t)
     PacketInterpreterBase::ptr p (Packet::ptr()->next());
     if (p) return Packet(p);
     PacketInterpreterBase::optional_range r (type::nextPacketRange(*this));
-    return (r && ! r->empty()) ? getNext(r) : Packet();
+    return (r && ! r->empty()) ? Packet(getNext(r)) : Packet();
 }
 
 // private members