Hi,

I have a program that uses DBus (Linux) to connect to the interface `org.freedesktop.NetworkManager' in order to call its method `GetDevices'. This is needed for populating a list of network interfaces that are currently available.

The called method has the signature `GetDevices() → (Array of [Object Path] devices)', which means it doesn't take any input parameters and returns an array of DBus object paths (e.g. strings).

But the C++ binding glibmm/giomm refuses to convert the methods response into a vector of strings.

Code:
auto container=Glib::VariantContainerBase::create_tuple(
    std::vector<Glib::VariantBase>{Glib::Variant<std::vector<Glib::ustring>>::create({"abc"})});

std::cout << container.get_type_string() << std::endl; // prints `(as)' (array of strings)

container.cast_dynamic<Glib::Variant<std::vector<Glib::ustring>>>(
    container.get_child()); // success

...
Code:
auto container=proxy->call_sync("GetDevices", detail::proxy::pack());

std::cout << container.get_type_string() << std::endl; // prints `(ao)' (array of object paths)

container.cast_dynamic<Glib::Variant<std::vector<Glib::ustring>>>(
    container.get_child()); // throws `std::bad_cast' at runtime

...
Short summary:
- I can convert a `VariantContainerBase' of type `(as)' to `std::vector<Glib::ustring>'
- I can't convert a `VariantContainerBase' of type `(ao)' to `std::vector<Glib::ustring>' due to a runtime error

Since there is no explicit Glib type for DBus object paths (or at least I haven't found one) and object paths are basically strings such as `/org/freedesktop/NetworkManager' I have no idea how to retrieve those damn object paths.

I'm not quite sure whether this is a giomm bug or anything else. It would be nice if someone more experienced could help me out... Thanks!