The original post contained the lines below (end of my post).

It would use dereference * or get() or implicit conversion to get the actual type out for function calls or each usage.

As advantages,

 - the feature would be more contained (no large language change)

 - this is a dynamic redact proposal, considering the full program flow (we can have a for loop from 0 to 99 and redact the variable in iteration 50); it would reuse the precondition contracts checks

 - as it is a scoped (automatic) variable, the boolean can be optimized out

 - it could help thinking about it to improve the full std::redact proposal. Even if my alternative is ugly and never to be accepted. Just to have an alternative can have advantages. Understand the commonalities and differences. Have a different perspective, how it works or could work.

 

 

> How about solving it as

> std::redactable<T>

> similar to std::optional<T>?

> It could still be a magic (templated) class going beyond the capabilities of pure library solutions.

> If it isn't redacted, it supports implicit conversions, * or get().

> At least it could make sense to compare the two syntaxes or necessary language changes.

> The changes within std::redacted<> are better contained in the standard, which could increase acceptance (perhaps).

> It could be solved by actually storing a bool and detect redaction at runtime. If the program flow can be proven the optimizer can remove the redaction bool (it is an automatic/local scoped stack variable after all).

 


 

-----Ursprüngliche Nachricht-----
Von: Henry Skoglund via Std-Proposals <std-proposals@lists.isocpp.org>
Gesendet: Mo 24.08.2026 15:22
Betreff: Re: [std-proposals] Forget forget let‘s redact
An: std-proposals@lists.isocpp.org;
CC: Henry Skoglund <henry@tungware.se>;
On 2026-08-24 14:19, Jonathan Grant via Std-Proposals wrote:
Could check state when calling redact() and unredact() too

template<class T>
class Redactable {
    T value_{};
    bool redacted_ = false;

public:
    void redact()   
    
    pre (!redacted_)
   
{ redacted_ = true; }

    void unredact()
         
pre (redacted_)
    
{ redacted_ = false; }

    operator T&()
        pre (!redacted_)
    {
        return value_;
    }
};


On 24/08/2026 13:07, Sebastian Wittmeier via Std-Proposals wrote:

Something like

 

template<class T>
class Redactable {
    T value_{};
    bool redacted_ = false;

public:
    void redact()   { redacted_ = true; }
    void unredact() { redacted_ = false; }

    operator T&()
        pre (!redacted_)
    {
        return value_;
    }
};

 

With the only magic being good error handing by the compiler or IDE?


You mean wrapping the redactee in a template?
I think it will be a less savory pill to swallow, assume the redactee is a function argument:
int munge(MyType raw);

with templates the function signature has to change to:
int munge(Redactable<MyType> raw);

Callers of that function then would have to update their code to support redacting :-(
-- 
 Std-Proposals mailing list
 Std-Proposals@lists.isocpp.org
 https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals