Let me rewrite your spinet line and hopefully clear some misconceptions.
// CVB_LIT is only usfull if your code must compile with wide strings and
// Unicode (usually on Windows and Linux), So it only makes sense
// together with a compatible path notation (lower-case and forward slash)!
auto device = Cvb::Device::Open(Cvb::ExpandPath(CVB_LIT("%CVB%/drivers/GenICam.vin")));
// You can always pass your literals directly, if not it is a bug on our side!
auto deviceNodeMap = device->NodeMap(CVB_LIT("Device"));
// Your A) will not compile as types do not match.
// If you need the a node's value you should provide the type alongside
// NodeMap::Node, to automatically cast the node to the wanted type.
// Without casting you will only get the base node type.
auto stringNode = deviceNodeMap->Node<Cvb::StringNode>(CVB_LIT(DeviceVendorName));
// Get the actual value.
// Note: it is not recommended to mix classic C-API and the object oriented wrappers.
// The only reason to do so, is because the wrappers are still missing some features!
auto value = stringNode->Value();