I thought exceptions imposed a bit more on the thrown type than the standard actually imposes.我想澄清这种困惑。对这些类型实际施加了什么?
答案 0 :(得分:4)
C ++ ISO规范§15.1/ 3声明
throw-expression的类型不应该是 不完整的类型,或指向不完整类型的指针或引用,而不是void *,const void *,volatile void *或const volatile void *。除了这些限制和15.3中提到的类型匹配的限制外,throw的操作数被完全视为调用(5.2.2)中的函数参数或return语句的操作数。
从这一点来看,你似乎应该能够抛出任何你想要的东西,只要你没有抛出你只是向前宣称的类型。
编辑:正如@Billy ONeal指出的那样,该类型必须是可复制的,这意味着它应该支持复制构造函数。