Skip to content
Snippets Groups Projects
  • Nat Goodspeed's avatar
    95d8085f
    SL-10297: Make LLSingletonBase::llerrs() et al. runtime variadic. · 95d8085f
    Nat Goodspeed authored
    Instead of accepting a fixed list of (const char* p1="", etc.), accept
    (std::initializer_list<std::string_view>). Accepting a
    std::initializer_list<T> in your parameter list allows coding (e.g.)
    func({T0, T1, T2, ... });
    -- in other words, you can pass the initializer_list a brace-enclosed list of
    an arbitrary number of instances of T.
    
    Using std::string_view instead of const char* means we can pass *either* const
    char* or std::string. string_view is cheaply constructed from either, allowing
    uniform treatment within the function.
    
    Constructing string_view from std::string simply extracts the pointer and
    length from the std::string.
    
    Constructing string_view from const char* (e.g. a "string literal") requires
    scanning the string for its terminating nul byte -- but that would be
    necessary even if the scan were deferred until the function body. Since
    string_view stores the length, the scan still happens only once.
    95d8085f
    History
    SL-10297: Make LLSingletonBase::llerrs() et al. runtime variadic.
    Nat Goodspeed authored
    Instead of accepting a fixed list of (const char* p1="", etc.), accept
    (std::initializer_list<std::string_view>). Accepting a
    std::initializer_list<T> in your parameter list allows coding (e.g.)
    func({T0, T1, T2, ... });
    -- in other words, you can pass the initializer_list a brace-enclosed list of
    an arbitrary number of instances of T.
    
    Using std::string_view instead of const char* means we can pass *either* const
    char* or std::string. string_view is cheaply constructed from either, allowing
    uniform treatment within the function.
    
    Constructing string_view from std::string simply extracts the pointer and
    length from the std::string.
    
    Constructing string_view from const char* (e.g. a "string literal") requires
    scanning the string for its terminating nul byte -- but that would be
    necessary even if the scan were deferred until the function body. Since
    string_view stores the length, the scan still happens only once.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.