ইসি_নোথ্রো_কনস্ট্রাক্টেবলের জিসিসি বাস্তবায়নে স্ট্যাটিক_কাস্টের প্রয়োজন কেন?


11

এখানে জিসিসি বাস্তবায়ন type_traitsকেন নেওয়া static_castদরকার?

template <typename _Tp, typename... _Args>
struct __is_nt_constructible_impl
    : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))> {};

template <typename _Tp, typename _Arg>
struct __is_nt_constructible_impl<_Tp, _Arg>
    : public integral_constant<bool,
                               // Why is `static_cast` needed here?
                               noexcept(static_cast<_Tp>(declval<_Arg>()))> {};

এই অসঙ্গতিটি অদ্ভুত বলে মনে হচ্ছে
— bit ই

4
আপনার প্রাসঙ্গিক libstdc ++ মেলিং তালিকায় এ জাতীয় প্রশ্ন জিজ্ঞাসা করা উচিত
— bit ই

উত্তর:


12

কোনও প্রকার হ'ল আর্গুমেন্ট তালিকা থেকে উদ্ভাবনযোগ্য ভেরিয়েবল ডিক্লেয়ারেশন থেকে গঠনমূলক not

T t(declval<Args>()...);

সুসংহত হবে এবং ব্যতিক্রম ছুঁড়ে না পরিচিত । বহুবচন আর্গুমেন্টের ক্ষেত্রে এটি রূপান্তর অভিব্যক্তির সু-গঠনের সুসংহত ও সংখ্যার সমতুল্য (মডেলো নো ডেস্কস্ট্রাকটিভিটি, এলডাব্লুজি 2116 দেখুন ) is

T(declval<Args>()...)

তবে একক যুক্তির ক্ষেত্রে অভিব্যক্তিটিকে castালাই-প্রকাশT(declval<Args>()) হিসাবে বিবেচনা করা হয় , যা প্রার্থনা করতে পারে এবংconst_castreinterpret_cast ; সুস্পষ্ট ব্যবহারের static_castঘোষণাপত্রের সমতা পুনরুদ্ধার করে।

একটি সুনির্দিষ্ট উদাহরণ হিসাবে , প্রকারগুলি বিবেচনা করুন:

struct D;
struct B { operator D&&() const; };
struct D : B {};

এখানে একটি static_castথেকে B constকরতে D&&রূপান্তর অপারেটর, কিন্তু একটি ঢালাই অভিব্যক্তি করতে পারেন রূপান্তর অপারেটর বাইপাস ব্যবহার করা আবশ্যক এবং তাই noexcept হয়। সুতরাং বাদ দেওয়া static_castভুল ফলাফল দেয় is_nothrow_constructible<D&&, B const>।


সুতরাং static_castপ্রয়োজন তাই যাতে অভিব্যক্তিটি সর্বদা হিসাবে direct initializationপরিবর্তিত হিসাবে বিবেচিত হয় cast expression?
— জোও পাইর্স

1
@ জোওপায়ারস হ্যাঁ, এটা ঠিক। এটি এখনও স্ট্যান্ডার্ড দ্বারা প্রয়োজনীয় যা ঠিক তা নয় কারণ অপারেটরটি ব্যবহার করে কোনও ঘোষণার বাইরে পরীক্ষা করা সম্ভব নয় noexcept, তবে এটি অনেক বেশি কাছাকাছি।
— ইকামত্মর

সাহায্যের জন্য ধন্যবাদ! : ডি
— জোও পাইরেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.