Packets: extended description of bad_cast exception in Packet.as()
[senf.git] / senf / Packets / Packet.cti
index 902681b..8184317 100644 (file)
@@ -29,9 +29,9 @@
 #include <senf/Utils/Exception.hh>
 
 #define prefix_ inline
-///////////////////////////////cti.p///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::Packet
 
 // conversion constructors
@@ -62,7 +62,10 @@ prefix_ OtherPacket senf::Packet::as()
     const
 {
     if (!is<OtherPacket>())
-        throw WrapException<std::bad_cast>(std::bad_cast());
+        throw WrapException<std::bad_cast>(std::bad_cast())
+            << ": called packet::as() with wrong PacketType: "
+            << (valid() ? typeId().prettyName() : "invalid packet")
+            << " != " << prettyName(typeid(OtherPacket));
     return OtherPacket(ptr()->as<typename OtherPacket::type>());
 }
 
@@ -158,7 +161,7 @@ prefix_ Annotation const & senf::Packet::annotation()
     return ptr()->annotation<Annotation>();
 }
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ConcretePacket<PacketType>
 
 // structors and default members
@@ -333,7 +336,7 @@ prefix_ typename senf::ConcretePacket<PacketType>::interpreter * senf::ConcreteP
     return static_cast< PacketInterpreter<PacketType> *>( Packet::ptr().get());
 }
 
-///////////////////////////////cti.e///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 
 \f