-
Notifications
You must be signed in to change notification settings - Fork 994
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[question] Is compatibility_cppstd transitive #17657
Comments
Hi @tgurriet thanks a lot for your question. This would not be the case, only the recipe marked as |
Thanks for the fast answer. Shouldn't it be the default behavior though? |
Not necessarily no, it would all dependend on the on the specific API that the consumer interacts with from its direct dependencies. Note for example how the current approach does not seem to be an issue at scale in Conan Center Index, where cppstd missmatches are somewhat common. If this behaviour is something you might need to change on your side for some reason or another, please do let us know so that we can discuss it :) |
The case I encounter today is related to the Eigen library and took me a second to understand. structs with eigen data members need to have a particular alignment. Pre C++17, this is done by overriding the new and delete operator for the struct with a macro provided by eigen:
In C++17 and up, the macro is empty, and alignment is done via the new So if you have a dependency that compiled a library pre C++17 that returns a pointer to S, and you then delete that pointer in your code compiled post C++17, you'll have a new/delete allocator mismatch (caught by sanitizers thankfully!). |
@AbrilRBS It feels like there should be a flag in global.conf to selected that compatibility behavior globally. Such a binary option is probably sufficient in practice. But if there is such a thing as a per package control of ABI compatibility, this should be handled transitively IMO, as transitive package compatibility management is one of the core feature of conan. |
@AbrilRBS Regarding the test that was added, I believe it's downstream propagation that should be checked. Package A has an ABI discontinuity from c++14 to 17. It defines Package B that depends on A will honor that requirement. The question is, if package B does not define |
What is your question?
Hello,
I have a question regarding
compatibility_cppstd
.If I set
extension_properties = {"compatibility_cppstd": False}
in the recipe of package A, does this mean that any package B that depends on A (either directly or indirectly) will be treated as if itscompatibility_cppstd
flag is set toFalse
?Thanks in advance!
Have you read the CONTRIBUTING guide?
The text was updated successfully, but these errors were encountered: