1. 5
  1. 1

    Another advantage [of structural concepts] is library interoperability: if you have three libraries A, B, and C, where A has a concept, B has a type that models the concept, and C uses the two, C can just pass the type of B to functions expecting A’s concept without B having to depend on A or C.

    Foonathan isn’t thinking outside the C++ box. In Rust (which has what he calls nominal concepts), library C can just as well impl A for B without A and B knowing about each other. At least in terms of source files; I’m not sure if crate boundaries mean anything.