Why do I get following error "TypeError: Function overload clash during conversion to external types for arguments." when using compiler version ^0.5.0; but when I choose 0.5.2; and later releases then I don't get any errors?
pragma solidity ^0.5.2;
A source file with the line above does not compile with a compiler earlier than version 0.5.2, and it also does not work on a compiler starting from version 0.6.0 (this second condition is added by using ^). This is because there will be no breaking changes until version 0.6.0, so you can always be sure that your code compiles the way you intended. The exact version of the compiler is not fixed, so that bugfix releases are still possible.
How does a floating compiler definition choose which compiler to use to translate the solidity code to bytecode?