// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_WIN_REFERENCE_H_ #define BASE_WIN_REFERENCE_H_ #include #include #include #include namespace base { namespace win { // Implementation of the UWP's IReference interface. template class Reference : public Microsoft::WRL::RuntimeClass< Microsoft::WRL::RuntimeClassFlags< Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>, ABI::Windows::Foundation::IReference> { public: using AbiT = typename ABI::Windows::Foundation::Internal::GetAbiType< typename ABI::Windows::Foundation::IReference::T_complex>::type; explicit Reference(const AbiT& value) : value_(value) {} explicit Reference(AbiT&& value) : value_(std::move(value)) {} Reference(const Reference&) = delete; Reference& operator=(const Reference&) = delete; // ABI::Windows::Foundation::IReference: IFACEMETHODIMP get_Value(AbiT* value) override { *value = value_; return S_OK; } private: ~Reference() override = default; AbiT value_; }; } // namespace win } // namespace base #endif // BASE_WIN_REFERENCE_H_