I have the following structure (simplified enough to replicate the issue):
template < class T, class P = struct NamedTypeDefaultTag > struct NamedType
{
    //static_assert(std::is_fundamental_v< T >, "Template parameter is not a fundamental type.");
    using ValueType = T;
    ValueType m{};
    constexpr NamedType() noexcept = default;
    constexpr NamedType(const NamedType & value) noexcept = default;
    constexpr NamedType(NamedType && value) noexcept = default;
    constexpr explicit NamedType(const T & value) noexcept : m{value} { }
    constexpr NamedType & operator = (const T & value) { m = value; return *this; }
};
And then I attempt to use the assignment operator like this:
int main() {
    using NT_t = NamedType< int >;
    // generates error
    int t = 1;
    NT_t a = t;
    NT_t b = 2;
    // works fine
    NT_t c;
    c = 2;
    return 0;
}
I suspect that because I declare it and assign it at the same time it somehow attempts to use a constructor (which is explicit).
But I don't understand what's causing it and how to get around it.
 
Aucun commentaire:
Enregistrer un commentaire