Listing 8: CComBSTR.
struct dirparts_proxy_traits { static CComVariant make_value(const recls_strptrs_t &ptr) { CComVariant var; var.vt = VT_BSTR; # ifdef RECLS_CHAR_TYPE_IS_CHAR var.bstrVal = ::SysAllocStringLen(winstl::a2w(ptr.begin, ptr.end - ptr.begin), ptr.end - ptr.begin); # elif defined(RECLS_CHAR_TYPE_IS_WCHAR) var.bstrVal = ::SysAllocStringLen( ptr.begin, ptr.end - ptr.begin); # endif /* RECLS_CHAR_TYPE_IS_WCHAR */ return var; } };