//clang 6.0.0

#include <memory>

class BigData
{
    // Only a builder can create data
	friend class Builder;
	BigData() = default;
public:
    // Move only
    BigData( BigData&& ) = default;
};

class Builder
{
    BigData Data;
public:
    const BigData&& Build() & { return std::move(Data); }
    // Functions to set up data go here
};

class Wrapper
{
    const BigData Data;
public:
    Wrapper( const BigData&& In ) : Data( std::move(In) ) {}
    
    // Functions to query data go here
};

std::unique_ptr<Wrapper> DoBuild()
{
    Builder b;
    // call functions on b to set up data here
    return std::make_unique<Wrapper>( b.Build() );
}

int main()
{
    auto wrapper = DoBuild();
}