此问题与this one有关,并且必须与以下特定情况有关
List<String> list= new Gson().fromJson(idSet, new TypeToken<ArrayList<String>>(){}.getType());
OLEObject ole_wsh
string ls_values, ls_message
ole_wsh = CREATE OLEObject
ole_wsh.ConnectToNewObject("MSScriptControl.ScriptControl")
ole_wsh.Language = "vbscript"
ole_wsh.AddCode('Function retDrives()~r~n' &
+ 'Set fso = CreateObject("Scripting.fileSystemObject")~r~n' &
+ 'drivesVolume = ""~r~n' &
+ 'For Each str In fso.Drives ~r~n' &
+ ' If str.IsReady Then ~r~n' &
+ ' drivesVolume = drivesVolume + "[" + str.VolumeName + "]" ~r~n' &
+ ' End If ~r~n' &
+ 'Next~r~n' &
+ 'retDrives=drivesVolume~r~n' &
+ 'End Function')
ls_values = ole_wsh.Eval("retDrives")
ole_wsh.DisconnectObject()
DESTROY ole_wsh
ls_message = "VOLUMES(s): " + ls_values
MessageBox("DRIVES",ls_message)
中的标准已将这两种情况标记为“ OK”,但是defect CWG 150的最新更新是template<class T, class U = T> class B { };
template <class ... Types> class C { };
template<template<class> class P> class X { };
X<B>{ }; // OK
X<C>{ }; // OK
决定不采取任何措施。 [temp.arg.template]/3
和CWG
都不接受代码。
clang
和gcc
是否不符合规定?
答案 0 :(得分:2)
gcc从7.1开始接受。除非提供新的标志,否则clang intentionally不接受它:
尽管是缺陷报告的解决方案,但是默认情况下,所有语言版本均禁用此功能,并且可以在Clang 4及更高版本中使用标记
-frelaxed-template-template-args
明确启用此功能。对标准的更改缺少模板部分排序的相应更改,从而导致合理且先前有效的代码存在歧义错误。该问题有望很快得到解决。
有关上述中断代码的示例,请参见this question。
有关该核心问题的最新更新是:
[在论文P0522R0上于2016年11月的会议上转至DR,]
这只是问题的顶部,而不是底部。我添加了链接。