এই কোডটি কলং (6,7,8,9, ট্রাঙ্ক) তে সংকলন করে না, তবে জিসিসিতে (7.1, 8.1, 9.1) জরিমানা সংকলন করেছে:
template<class T> struct TypeHolder { using type = T; };
template<int i>
class Outer {
private:
template<class T>
static constexpr auto compute_type() {
if constexpr (i == 42) {
return TypeHolder<bool>{};
} else {
return TypeHolder<T>{};
}
}
public:
template<class T>
using TheType = typename decltype(Outer<i>::compute_type<T>())::type;
};
int main() {
Outer<42>::TheType<int> i;
}
ঝনঝন আমাকে বলে:
<source>:17:49: error: 'compute_type' is a private member of 'Outer<42>'
… এটি অবশ্যই কোনটি তবে আমি একই শ্রেণীর ভিতরে থেকে সেই সদস্যকে অ্যাক্সেস করার চেষ্টা করছি । কেন এটি সেখানে অ্যাক্সেসযোগ্য হবে না আমি তা দেখতে পাচ্ছি না। আমি কি একটি ঝাঁকুনি বাগ আঘাত (এবং আমি ফাইল করা উচিত)?
আপনি কোড সহ খেলনা প্রায় পারেন Godbolt এর কম্পাইলার এক্সপ্লোরার ।
হাস্যকর! তবে অ্যাক্সেস চেকটি অবশ্যই "অনুমতি" দিয়ে তৈরি করা উচিত
—
লুকাশ বার্থ
Outer<42>
, তাই না main
? আমার কাছে এখন বাগের মতো আরও বেশি খুঁজছেন।
ব্যবহার করে
—
ব্র্যান্ডন
std::result_of
পরিবর্তে কাজ করে?
এফডাব্লুআইডাব্লু, আইসিসি এবং এমএসভিসিতেও কাজ করে।
—
ক্রিসএমএম
friend int main();
কলম্বকে অভিযোগ করা থেকে বিরত করে।