I think it was decided that you have to show proper intent to get what you want, because there can be unintended effects with implicit conversions like that. If anything, newer C++ standards are trying to avoid implicit conversions.

Build(ExtensionType) has a default parameter. Build() is the same as Build(ExtensionType::None).
And okay. I haven't been fortunate enough to learn from a tutorial that taught naming conventions and coding styles, but that will soon change.

As I tried modifying the algorithm from what L B referenced to work with my code, I found that I had to explicitly call the std::unique_ptr constructor. So I tried using that with my original code, and it worked! Guess I wasn't doing something completely impossible. =D