Libupnpp is a C++ wrapper for libupnp a.k.a Portable UPnP (up to branch 0.17), or its C++ descendant, libnpupnp (versions 0.18 and later).
Libupnpp can be used to implement UPnP devices and services, or Control Points. The Control Point side of libupnpp, which is documented here, allows a C++ program to discover UPnP devices, and exchange commands and status with them.