本家の質問で観たコードで、
stdout = fopen("out.txt", "w");
の様に書いた場合の挙動について質問されていました。
コードの目的としてはstdoutを利用しているであろうprintfのような関数の出力をコンソールではなくてファイルに出力するというものです。(そういう風に理解しています)
(※本家の質問自体をもう一度ここで質問しているのではないことに注意してください)
このような場合freopenを利用するべきというのは知っていましたが、
(つまりfreopenを使用してのという意味での変更は可能)
動作を再現してみようと思ってgccでコンパイルを試みましたが、

error: lvalue required as left operand of assignment

のようにエラーになりコンパイル自体ができませんでした。
stdio.hの中身を観てみるとマクロで&ファイル構造体のようになっていて、
なるほどコンパイラの言うとおりだと思ったのですが、
本家の質問者はコンパイルして実行しているわけで

stdout は変更可能なのかどうなのか?

という疑問が湧きました。
自分なりに規格を調べて見た結果
freopenの説明の一部に

272) The primary use of the freopen function is to change the file
associated with a standard text stream (stderr, stdin, or stdout), as
those identifiers need not be modifiable lvalues to which the value
returned by the fopen function may be assigned.

「これらの識別子(つまりstdin,stdout,stderr)は変更可能でなくてもよい。」
とあって、
私の解釈としては、
stdoutは(実装上)変更できてもよい(つまり代入可能)し、できなくてもよい。

でも変更不能の場合がある以上
プログラムとして
stdout = fopen("out.txt", "w");
のようなコードは書くべきでは無い
ということです。

私の解釈・意見はともかく、本家の質問者の場合は実際に変更できているわけで、
変更出来る実装だった場合、

このような使用は有効ですか?それとも無効ですか? 
実際に変更できようができまいが、このような使用を試みること自体が無効?
(つまり実質的にこのような代入による変更は不能 ※私の意見はこれ)
規格上このような使用は動作未定義だとされていれば無効だとはっきりしますし、
あるいは実装定義であるということなら状況により使用可能(有効)だということになるかと思いますが、
よくわからないので質問しました。