سلوك تمكين غريب باستخدام فئات متداخلة (علة أو ميزة محمول MSVC أو ميزة)
-
13-09-2020 - |
سؤال
بعد بعض الوقت تصحيح التعليمات البرمجية الخاصة بي، قمت بتتبع سبب مشاكلي لبعض نتائج تخصص القالب غير المتوقع باستخدام Enable_If:
يفشل التعليمات البرمجية التالية التأكيد في DOTEST () في Visual Studio 2010 (و 2008)، في حين أنها لا تعمل في G ++ 3.4.5. ومع ذلك، عندما أزال القالب من SomeClass أو نقل my_condition خارج نطاق someclass يعمل في MSVC، أيضا.
هل هناك خطأ ما في هذا الرمز الذي من شأنه أن يفسر هذا السلوك (جزئيا على الأقل) أو هو هذا الخطأ في مترجم MSVC؟
(باستخدام رمز المثال هذا هو نفسه بالنسبة للزيادة والإصدار C ++ 0x STL)
giveacodicetagpre.عند محاولة إصلاحه عن طريق تحريك الشرط من النطاق، لاحظت أيضا أن هذا ليس كافيا عند استخدام STD :: Enable_If، ولكن على الأقل يعمل مع Bost :: Enable_If:
giveacodicetagpre.آمل أن يكون لدى شخص ما شرحا لهذا.
المحلول
كل شيء على ما يرام مع التعليمات البرمجية الخاصة بك، فهذا فقط VC هو عربات التي تجرها الدواب.من المعروف أن تواجه مشاكل في تخصص القالب الجزئي للفصول الدراسية لعضو القوالب.