1) В данном случае, идея хорошая, так как семантика поломана не будет, но при условии, что
2) В случае несовпадения валют вы будете бросать исключение.
Пояснение: Если вы будете возвращать не валюту, (nullptr, false, не важно), вы сломаете семантику сложения, а это делать не следует. Так что ошибку надо обрабатывать в исключении.
Проблема: Если возникновение таких исключений будет частым (например, это часть бизнес-логики), у вас получится чуть более тормозная программа. В таком случае, лучше отказаться от перегрузки оператора и написать обычный метод.
Если же валюта вам известна уже на этапе компиляции, переделайте ваш класс в шаблон и делайте все проверки уже на этапе компиляции - это наилучший вариант.