Coverage Report

Created: 2026-04-29 19:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/bitcoin/src/util/result.h
Line
Count
Source
1
// Copyright (c) 2022-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or https://www.opensource.org/licenses/mit-license.php.
4
5
#ifndef BITCOIN_UTIL_RESULT_H
6
#define BITCOIN_UTIL_RESULT_H
7
8
#include <attributes.h>
9
#include <util/translation.h>
10
11
#include <variant>
12
13
namespace util {
14
15
struct Error {
16
    bilingual_str message;
17
};
18
19
//! The util::Result class provides a standard way for functions to return
20
//! either error messages or result values.
21
//!
22
//! It is intended for high-level functions that need to report error strings to
23
//! end users. Lower-level functions that don't need this error-reporting and
24
//! that only need error-handling should avoid util::Result and instead use
25
//! util::Expected, std::optional, std::variant, or custom structs
26
//! and enum types to return function results.
27
//!
28
//! Usage examples can be found in \example ../test/result_tests.cpp, but in
29
//! general code returning `util::Result<T>` values is very similar to code
30
//! returning `std::optional<T>` values. Existing functions returning
31
//! `std::optional<T>` can be updated to return `util::Result<T>` and return
32
//! error strings usually just replacing `return std::nullopt;` with `return
33
//! util::Error{error_string};`.
34
template <class M>
35
class Result
36
{
37
private:
38
    using T = std::conditional_t<std::is_same_v<M, void>, std::monostate, M>;
39
40
    std::variant<bilingual_str, T> m_variant;
41
42
    //! Disallow copy constructor, require Result to be moved for efficiency.
43
    Result(const Result&) = delete;
44
45
    //! Disallow operator= to avoid confusion in the future when the Result
46
    //! class gains support for richer error reporting, and callers should have
47
    //! ability to set a new result value without clearing existing error
48
    //! messages.
49
    Result& operator=(const Result&) = delete;
50
    Result& operator=(Result&&) = delete;
51
52
    template <typename FT>
53
    friend bilingual_str ErrorString(const Result<FT>& result);
54
55
public:
56
17.8k
    Result() : m_variant{std::in_place_index_t<1>{}, std::monostate{}} {}  // constructor for void
57
52.4k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<int>::Result(int)
Line
Count
Source
57
77
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<bilingual_str>::Result(bilingual_str)
Line
Count
Source
57
2
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<result_tests::NoCopy>::Result(result_tests::NoCopy)
Line
Count
Source
57
2
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<kernel::ChainstateManagerOpts>::Result(kernel::ChainstateManagerOpts)
Line
Count
Source
57
11
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::Result(std::unique_ptr<AddrMan, std::default_delete<AddrMan>>)
Line
Count
Source
57
1.05k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::Result(std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>)
Line
Count
Source
57
1.33k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<CBlockIndex*>::Result(CBlockIndex*)
Line
Count
Source
57
14
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<wallet::SelectionResult>::Result(wallet::SelectionResult)
Line
Count
Source
57
22.2k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
Unexecuted instantiation: util::Result<std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>>::Result(std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>)
Unexecuted instantiation: util::Result<interfaces::WalletMigrationResult>::Result(interfaces::WalletMigrationResult)
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>)
Line
Count
Source
57
21.3k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<wallet::CreatedTransactionResult>::Result(wallet::CreatedTransactionResult)
Line
Count
Source
57
3.51k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<wallet::CoinsResult>::Result(wallet::CoinsResult)
Line
Count
Source
57
506
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<fs::path>::Result(fs::path)
Line
Count
Source
57
1.40k
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>)
Line
Count
Source
57
844
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<wallet::MigrationResult>::Result(wallet::MigrationResult)
Line
Count
Source
57
35
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
util::Result<ExternalSigner>::Result(ExternalSigner)
Line
Count
Source
57
10
    Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}
58
8.74k
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<int>::Result(util::Error)
Line
Count
Source
58
6
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<bilingual_str>::Result(util::Error)
Line
Count
Source
58
2
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<result_tests::NoCopy>::Result(util::Error)
Line
Count
Source
58
2
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<kernel::ChainstateManagerOpts>::Result(util::Error)
Line
Count
Source
58
4
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::Result(util::Error)
Line
Count
Source
58
9
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<void>::Result(util::Error)
Line
Count
Source
58
42
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
Unexecuted instantiation: util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::Result(util::Error)
util::Result<CBlockIndex*>::Result(util::Error)
Line
Count
Source
58
50
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<wallet::SelectionResult>::Result(util::Error)
Line
Count
Source
58
8.46k
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
Unexecuted instantiation: util::Result<std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>>::Result(util::Error)
Unexecuted instantiation: util::Result<interfaces::WalletMigrationResult>::Result(util::Error)
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(util::Error)
Line
Count
Source
58
22
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<wallet::CoinsResult>::Result(util::Error)
Line
Count
Source
58
6
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<wallet::CreatedTransactionResult>::Result(util::Error)
Line
Count
Source
58
119
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<fs::path>::Result(util::Error)
Line
Count
Source
58
4
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(util::Error)
Line
Count
Source
58
3
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<wallet::MigrationResult>::Result(util::Error)
Line
Count
Source
58
14
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
util::Result<ExternalSigner>::Result(util::Error)
Line
Count
Source
58
2
    Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}
59
4.12k
    Result(Result&&) = default;
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>&&)
Line
Count
Source
59
4
    Result(Result&&) = default;
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>&&)
Line
Count
Source
59
14
    Result(Result&&) = default;
util::Result<wallet::SelectionResult>::Result(util::Result<wallet::SelectionResult>&&)
Line
Count
Source
59
3.63k
    Result(Result&&) = default;
util::Result<wallet::CreatedTransactionResult>::Result(util::Result<wallet::CreatedTransactionResult>&&)
Line
Count
Source
59
472
    Result(Result&&) = default;
60
83.1k
    ~Result() = default;
util::Result<void>::~Result()
Line
Count
Source
60
17.9k
    ~Result() = default;
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::~Result()
Line
Count
Source
60
1.33k
    ~Result() = default;
util::Result<int>::~Result()
Line
Count
Source
60
83
    ~Result() = default;
util::Result<result_tests::NoCopy>::~Result()
Line
Count
Source
60
4
    ~Result() = default;
util::Result<bilingual_str>::~Result()
Line
Count
Source
60
4
    ~Result() = default;
util::Result<CBlockIndex*>::~Result()
Line
Count
Source
60
64
    ~Result() = default;
util::Result<kernel::ChainstateManagerOpts>::~Result()
Line
Count
Source
60
15
    ~Result() = default;
util::Result<wallet::SelectionResult>::~Result()
Line
Count
Source
60
34.3k
    ~Result() = default;
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::~Result()
Line
Count
Source
60
21.3k
    ~Result() = default;
util::Result<wallet::CoinsResult>::~Result()
Line
Count
Source
60
512
    ~Result() = default;
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::~Result()
Line
Count
Source
60
861
    ~Result() = default;
util::Result<wallet::CreatedTransactionResult>::~Result()
Line
Count
Source
60
4.10k
    ~Result() = default;
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::~Result()
Line
Count
Source
60
1.05k
    ~Result() = default;
util::Result<wallet::MigrationResult>::~Result()
Line
Count
Source
60
49
    ~Result() = default;
util::Result<ExternalSigner>::~Result()
Line
Count
Source
60
12
    ~Result() = default;
util::Result<fs::path>::~Result()
Line
Count
Source
60
1.41k
    ~Result() = default;
61
62
    //! std::optional methods, so functions returning optional<T> can change to
63
    //! return Result<T> with minimal changes to existing code, and vice versa.
64
195k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<void>::has_value() const
Line
Count
Source
64
17.9k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::has_value() const
Line
Count
Source
64
4.00k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<int>::has_value() const
Line
Count
Source
64
169
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<result_tests::NoCopy>::has_value() const
Line
Count
Source
64
11
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<bilingual_str>::has_value() const
Line
Count
Source
64
11
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<CBlockIndex*>::has_value() const
Line
Count
Source
64
95
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<kernel::ChainstateManagerOpts>::has_value() const
Line
Count
Source
64
37
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::has_value() const
Line
Count
Source
64
77.3k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<wallet::CoinsResult>::has_value() const
Line
Count
Source
64
1.02k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<wallet::SelectionResult>::has_value() const
Line
Count
Source
64
73.0k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::has_value() const
Line
Count
Source
64
1.63k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<wallet::CreatedTransactionResult>::has_value() const
Line
Count
Source
64
14.9k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::has_value() const
Line
Count
Source
64
2.11k
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<wallet::MigrationResult>::has_value() const
Line
Count
Source
64
216
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<ExternalSigner>::has_value() const
Line
Count
Source
64
24
    bool has_value() const noexcept { return m_variant.index() == 1; }
util::Result<fs::path>::has_value() const
Line
Count
Source
64
2.86k
    bool has_value() const noexcept { return m_variant.index() == 1; }
65
    const T& value() const LIFETIMEBOUND
66
5.11k
    {
67
5.11k
        assert(has_value());
68
5.11k
        return std::get<1>(m_variant);
69
5.11k
    }
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::value() const
Line
Count
Source
66
2.67k
    {
67
2.67k
        assert(has_value());
68
2.67k
        return std::get<1>(m_variant);
69
2.67k
    }
util::Result<int>::value() const
Line
Count
Source
66
78
    {
67
78
        assert(has_value());
68
78
        return std::get<1>(m_variant);
69
78
    }
util::Result<result_tests::NoCopy>::value() const
Line
Count
Source
66
3
    {
67
3
        assert(has_value());
68
3
        return std::get<1>(m_variant);
69
3
    }
util::Result<bilingual_str>::value() const
Line
Count
Source
66
3
    {
67
3
        assert(has_value());
68
3
        return std::get<1>(m_variant);
69
3
    }
util::Result<kernel::ChainstateManagerOpts>::value() const
Line
Count
Source
66
11
    {
67
11
        assert(has_value());
68
11
        return std::get<1>(m_variant);
69
11
    }
util::Result<wallet::SelectionResult>::value() const
Line
Count
Source
66
898
    {
67
898
        assert(has_value());
68
898
        return std::get<1>(m_variant);
69
898
    }
util::Result<fs::path>::value() const
Line
Count
Source
66
1.45k
    {
67
1.45k
        assert(has_value());
68
1.45k
        return std::get<1>(m_variant);
69
1.45k
    }
70
    T& value() LIFETIMEBOUND
71
70.7k
    {
72
70.7k
        assert(has_value());
73
70.7k
        return std::get<1>(m_variant);
74
70.7k
    }
util::Result<int>::value()
Line
Count
Source
71
1
    {
72
1
        assert(has_value());
73
1
        return std::get<1>(m_variant);
74
1
    }
util::Result<result_tests::NoCopy>::value()
Line
Count
Source
71
1
    {
72
1
        assert(has_value());
73
1
        return std::get<1>(m_variant);
74
1
    }
util::Result<bilingual_str>::value()
Line
Count
Source
71
1
    {
72
1
        assert(has_value());
73
1
        return std::get<1>(m_variant);
74
1
    }
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::value()
Line
Count
Source
71
38.5k
    {
72
38.5k
        assert(has_value());
73
38.5k
        return std::get<1>(m_variant);
74
38.5k
    }
util::Result<wallet::SelectionResult>::value()
Line
Count
Source
71
22.6k
    {
72
22.6k
        assert(has_value());
73
22.6k
        return std::get<1>(m_variant);
74
22.6k
    }
util::Result<wallet::CoinsResult>::value()
Line
Count
Source
71
506
    {
72
506
        assert(has_value());
73
506
        return std::get<1>(m_variant);
74
506
    }
util::Result<wallet::CreatedTransactionResult>::value()
Line
Count
Source
71
7.04k
    {
72
7.04k
        assert(has_value());
73
7.04k
        return std::get<1>(m_variant);
74
7.04k
    }
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::value()
Line
Count
Source
71
780
    {
72
780
        assert(has_value());
73
780
        return std::get<1>(m_variant);
74
780
    }
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::value()
Line
Count
Source
71
1.05k
    {
72
1.05k
        assert(has_value());
73
1.05k
        return std::get<1>(m_variant);
74
1.05k
    }
util::Result<CBlockIndex*>::value()
Line
Count
Source
71
9
    {
72
9
        assert(has_value());
73
9
        return std::get<1>(m_variant);
74
9
    }
util::Result<wallet::MigrationResult>::value()
Line
Count
Source
71
153
    {
72
153
        assert(has_value());
73
153
        return std::get<1>(m_variant);
74
153
    }
util::Result<ExternalSigner>::value()
Line
Count
Source
71
10
    {
72
10
        assert(has_value());
73
10
        return std::get<1>(m_variant);
74
10
    }
75
    template <class U>
76
    T value_or(U&& default_value) const&
77
    {
78
        return has_value() ? value() : std::forward<U>(default_value);
79
    }
80
    template <class U>
81
    T value_or(U&& default_value) &&
82
6
    {
83
6
        return has_value() ? std::move(value()) : std::forward<U>(default_value);
84
6
    }
int util::Result<int>::value_or<int>(int&&) &&
Line
Count
Source
82
2
    {
83
2
        return has_value() ? std::move(value()) : std::forward<U>(default_value);
84
2
    }
result_tests::NoCopy util::Result<result_tests::NoCopy>::value_or<int>(int&&) &&
Line
Count
Source
82
2
    {
83
2
        return has_value() ? std::move(value()) : std::forward<U>(default_value);
84
2
    }
bilingual_str util::Result<bilingual_str>::value_or<bilingual_str>(bilingual_str&&) &&
Line
Count
Source
82
2
    {
83
2
        return has_value() ? std::move(value()) : std::forward<U>(default_value);
84
2
    }
85
116k
    explicit operator bool() const noexcept { return has_value(); }
util::Result<void>::operator bool() const
Line
Count
Source
85
17.9k
    explicit operator bool() const noexcept { return has_value(); }
util::Result<int>::operator bool() const
Line
Count
Source
85
87
    explicit operator bool() const noexcept { return has_value(); }
util::Result<result_tests::NoCopy>::operator bool() const
Line
Count
Source
85
4
    explicit operator bool() const noexcept { return has_value(); }
util::Result<bilingual_str>::operator bool() const
Line
Count
Source
85
4
    explicit operator bool() const noexcept { return has_value(); }
util::Result<CBlockIndex*>::operator bool() const
Line
Count
Source
85
86
    explicit operator bool() const noexcept { return has_value(); }
util::Result<kernel::ChainstateManagerOpts>::operator bool() const
Line
Count
Source
85
26
    explicit operator bool() const noexcept { return has_value(); }
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::operator bool() const
Line
Count
Source
85
38.8k
    explicit operator bool() const noexcept { return has_value(); }
util::Result<wallet::CoinsResult>::operator bool() const
Line
Count
Source
85
518
    explicit operator bool() const noexcept { return has_value(); }
util::Result<wallet::SelectionResult>::operator bool() const
Line
Count
Source
85
49.4k
    explicit operator bool() const noexcept { return has_value(); }
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::operator bool() const
Line
Count
Source
85
850
    explicit operator bool() const noexcept { return has_value(); }
util::Result<wallet::CreatedTransactionResult>::operator bool() const
Line
Count
Source
85
6.17k
    explicit operator bool() const noexcept { return has_value(); }
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::operator bool() const
Line
Count
Source
85
1.06k
    explicit operator bool() const noexcept { return has_value(); }
Unexecuted instantiation: util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::operator bool() const
util::Result<wallet::MigrationResult>::operator bool() const
Line
Count
Source
85
63
    explicit operator bool() const noexcept { return has_value(); }
util::Result<ExternalSigner>::operator bool() const
Line
Count
Source
85
14
    explicit operator bool() const noexcept { return has_value(); }
util::Result<fs::path>::operator bool() const
Line
Count
Source
85
1.41k
    explicit operator bool() const noexcept { return has_value(); }
86
717
    const T* operator->() const LIFETIMEBOUND { return &value(); }
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::operator->() const
Line
Count
Source
86
14
    const T* operator->() const LIFETIMEBOUND { return &value(); }
util::Result<wallet::SelectionResult>::operator->() const
Line
Count
Source
86
703
    const T* operator->() const LIFETIMEBOUND { return &value(); }
87
1.66k
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<int>::operator*() const
Line
Count
Source
87
1
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<result_tests::NoCopy>::operator*() const
Line
Count
Source
87
1
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<bilingual_str>::operator*() const
Line
Count
Source
87
1
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<kernel::ChainstateManagerOpts>::operator*() const
Line
Count
Source
87
11
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<wallet::SelectionResult>::operator*() const
Line
Count
Source
87
195
    const T& operator*() const LIFETIMEBOUND { return value(); }
util::Result<fs::path>::operator*() const
Line
Count
Source
87
1.45k
    const T& operator*() const LIFETIMEBOUND { return value(); }
88
5.60k
    T* operator->() LIFETIMEBOUND { return &value(); }
util::Result<wallet::SelectionResult>::operator->()
Line
Count
Source
88
734
    T* operator->() LIFETIMEBOUND { return &value(); }
util::Result<wallet::CreatedTransactionResult>::operator->()
Line
Count
Source
88
4.71k
    T* operator->() LIFETIMEBOUND { return &value(); }
Unexecuted instantiation: util::Result<wallet::CoinsResult>::operator->()
util::Result<wallet::MigrationResult>::operator->()
Line
Count
Source
88
153
    T* operator->() LIFETIMEBOUND { return &value(); }
util::Result<ExternalSigner>::operator->()
Line
Count
Source
88
6
    T* operator->() LIFETIMEBOUND { return &value(); }
89
64.3k
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::operator*()
Line
Count
Source
89
38.5k
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<wallet::SelectionResult>::operator*()
Line
Count
Source
89
21.9k
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<wallet::CoinsResult>::operator*()
Line
Count
Source
89
506
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<wallet::CreatedTransactionResult>::operator*()
Line
Count
Source
89
2.33k
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::operator*()
Line
Count
Source
89
1.05k
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<CBlockIndex*>::operator*()
Line
Count
Source
89
9
    T& operator*() LIFETIMEBOUND { return value(); }
util::Result<ExternalSigner>::operator*()
Line
Count
Source
89
4
    T& operator*() LIFETIMEBOUND { return value(); }
90
};
91
92
template <typename T>
93
bilingual_str ErrorString(const Result<T>& result)
94
12.4k
{
95
12.4k
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
12.4k
}
bilingual_str util::ErrorString<int>(util::Result<int> const&)
Line
Count
Source
94
6
{
95
6
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
6
}
bilingual_str util::ErrorString<result_tests::NoCopy>(util::Result<result_tests::NoCopy> const&)
Line
Count
Source
94
2
{
95
2
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
2
}
bilingual_str util::ErrorString<bilingual_str>(util::Result<bilingual_str> const&)
Line
Count
Source
94
2
{
95
2
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
2
}
bilingual_str util::ErrorString<kernel::ChainstateManagerOpts>(util::Result<kernel::ChainstateManagerOpts> const&)
Line
Count
Source
94
11
{
95
11
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
11
}
bilingual_str util::ErrorString<void>(util::Result<void> const&)
Line
Count
Source
94
42
{
95
42
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
42
}
bilingual_str util::ErrorString<wallet::SelectionResult>(util::Result<wallet::SelectionResult> const&)
Line
Count
Source
94
12.2k
{
95
12.2k
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
12.2k
}
bilingual_str util::ErrorString<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>(util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>> const&)
Line
Count
Source
94
9
{
95
9
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
9
}
Unexecuted instantiation: bilingual_str util::ErrorString<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>(util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>> const&)
bilingual_str util::ErrorString<CBlockIndex*>(util::Result<CBlockIndex*> const&)
Line
Count
Source
94
22
{
95
22
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
22
}
bilingual_str util::ErrorString<wallet::MigrationResult>(util::Result<wallet::MigrationResult> const&)
Line
Count
Source
94
14
{
95
14
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
14
}
bilingual_str util::ErrorString<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>(util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>> const&)
Line
Count
Source
94
21
{
95
21
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
21
}
bilingual_str util::ErrorString<wallet::CoinsResult>(util::Result<wallet::CoinsResult> const&)
Line
Count
Source
94
6
{
95
6
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
6
}
bilingual_str util::ErrorString<ExternalSigner>(util::Result<ExternalSigner> const&)
Line
Count
Source
94
2
{
95
2
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
2
}
bilingual_str util::ErrorString<fs::path>(util::Result<fs::path> const&)
Line
Count
Source
94
4
{
95
4
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
4
}
bilingual_str util::ErrorString<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>(util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>> const&)
Line
Count
Source
94
3
{
95
3
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
3
}
bilingual_str util::ErrorString<wallet::CreatedTransactionResult>(util::Result<wallet::CreatedTransactionResult> const&)
Line
Count
Source
94
111
{
95
111
    return result ? bilingual_str{} : std::get<0>(result.m_variant);
96
111
}
97
} // namespace util
98
99
#endif // BITCOIN_UTIL_RESULT_H