I've got into an interesting situation today.
When you create a structure, there is no problem to have as keys numbers. Example:
<cfset myStruct = StructNew()>
<cfset myStruct.key1 = 1>
<cfset myStruct.2 = "asd">
<cfdump var="#myStruct#">

If you will run that code you will see it working with no problems.
But let's say you have a situation where you need to have the keys dynamic. In this case i would have a script like this:
<cfset myStruct = StructNew()>
<cfset myVar = "key1">
<cfset "myStruct.#myVar#" = 1>
<cfset myVar = "2">
<cfset "myStruct.#myVar#" = "asd">
<cfdump var="#myStruct#">

And yeah... this one will give you an error like "The string myStruct.2 is not a valid ColdFusion variable name".

P.S. Before someone to point that you can have it as myStruct[myVar], yeah, i know that But the situation where i needed it was when you have a deep structure with many levels and you don't know exactly what level you need to address. Like if you would have a function used to set a value for a given structure position (like SetStructure("myStruct.myStruct2.myStruct3", "some text as value") or SetStructure("myStruct.myStruct2.myStruct3.myStruct4", otherStructAsValue)). Having each level of the structure being a "valid ColdFusion variable name" all will work fine. But as soon as you will want a level to be for example a number, you will get into trouble.
If anyone have a solution to this, i would love to know it too.