Изменяет способ взаимодействия таких черт, как std::is_constructible
и std::is_convertible
с optional
. Например, дано:
class A {};
int main()
{
std::cout << std::is_constructible<optional<A>, int>::value << '\n';
};
Ваш оригинальный код будет распечатан:
0
Но ваш новый код будет распечатан:
1
Если это нежелательно и вы все еще хотите использовать новый код, вы можете enable_if
ограничить U
допустимыми типами.
Единственная другая возможная проблема, которую я вижу, - это если T
может быть ссылочным типом (например, int&
). В этом случае второй конструктор вашего исходного кода выглядит подозрительно, так как он передается в rvalue, и вы, возможно, пытаетесь связать это rvalue с неконстантной ссылкой lvalue (не могу сказать точно). Если T
никогда не может быть ссылочным типом, не нужно беспокоиться об этом.